0

我有一张贷款信息表。

例子:

_________________________________________________________________
|id|LoanDate|EquipmentId|FromUser|FromLocation|ToUser|ToLocation|
|---------------------------------------------------------------|
|1 |2012-1-1| 100       | NULL   |  219       | 605  | NULL     |
|2 |2012-1-2| 100       | 605    |  NULL      | NULL | 219      |
|3 |2012-1-3| 100       | NULL   |  219       | 509  | NULL     |
-----------------------------------------------------------------

如您所见,用户 605 被借了一天设备,然后在第二天归还。然后设备在之后的第二天被借给了另一个用户。

考虑到该表具有跟踪移动的条目(包括跨日期的退货),我将如何尝试查找当前有哪些设备当前借给他们的用户。

任何有关如何解决此问题的想法将不胜感激。伪代码、SQL 或 LINQ 也可以。

谢谢

4

1 回答 1

0

如果您按 LoanDate 降序排列贷款然后分组EquipmentId,则每个组中的第一个元素将是其最近的贷款EquipmentId。如果userId不为空,则为当前拥有该设备的用户的 ID。

var items = from loan in loans
            orderby loan.LoanDate desc
            group loan by loan.EquipmentId into grp
            let userId = grp.First().ToUser
            where userId != null
            select new { EquipmentId = grp.Key, UserId = userId };
于 2012-11-26T00:02:05.743 回答