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 は 1 日だけ機器を貸与され、翌日には返却されました。その翌日、別のユーザーに機器を貸与されました。

このテーブルには、移動を追跡するエントリが含まれていることを考慮して、現在どのユーザーがどの機器を現在貸し出しているかを見つけるにはどうすればよいでしょうか。

これをどのように行うかについてのアイデアをいただければ幸いです。疑似コード、SQL、または LINQ も問題ありません。

ありがとう

4

1 に答える 1

0

LoanDate の降順でローンを並べ替え、 でグループ化EquipmentIdすると、各グループの最初の要素がその の最新のローンになりますEquipmentId。が null でない場合、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 に答える