3

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) }

このシナリオは可能ですか?(パフォーマンス面で)より良い解決策はありますか?

4

1 に答える 1