我有一张贷款信息表。
示例:
_________________________________________________________________
|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也很好。
由于
答案 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 };