DBにこのテーブルがあります:
ID | Timestamp | Score
------|---------------------|-------------------
1 | 2013-01-01 12:00:00 | 15
1 | 2013-01-02 11:00:00 | 1
1 | 2013-01-03 16:00:00 | 4
2 | 2013-01-08 04:00:00 | 7
2 | 2013-01-09 08:00:00 | 9
2 | 2013-01-10 11:00:00 | 6
3 | 2013-01-03 12:00:00 | 14
3 | 2013-01-01 10:00:00 | 15
3 | 2013-01-02 00:00:00 | 17
必要なのは、各 ID の最後のスコアです。つまり、ID ごとに、タイムスタンプが最も高い行を選択し、その行からスコアを取得する必要があります。
私はこのようにSQLサーバーでそれを行うことができました(これは最適ではないかもしれません)
SELECT ID, Timestamp, Score FROM Data cd
LEFT OUTER JOIN
(SELECT ID as SubId, MAX(Timestamp) AS TS
FROM Data GROUP BY ID) AS SUB
ON cd.ID = SUB.SubId
WHERE Timestamp = TS
この状況に対する LINQ to Entities (v4) ソリューションが必要ですが、この状況でサブクエリとグループ化にアプローチする方法がわかりません。
@編集(コメントへの返信):次のようなことを試しましたが、そのグループ化されたアイテムからスコアを取得する方法、またはサブクエリをこれに統合する方法がわかりません。
from d in Datas
group d by d.ID into group
select new { ID = group.Key, TS = group.Max(i => i.Timestamp) }
このシナリオは可能ですか?(パフォーマンス面で)より良い解決策はありますか?