目前贷款项目

时间:2012-11-25 23:39:36

标签: sql linq database-design deriving

我有一张贷款信息表。

示例:

_________________________________________________________________
|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也很好。

由于

1 个答案:

答案 0 :(得分: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 };