我在数据库中有这张表:
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) 解决方案,但我不确定在这种情况下如何处理子查询和分组。
@Edit(回复评论):我尝试过类似以下的方法,但我不知道如何从该分组项目中获取分数,或者如何将子查询集成到其中。
from d in Datas
group d by d.ID into group
select new { ID = group.Key, TS = group.Max(i => i.Timestamp) }
这种情况可能吗?有没有更好的解决方案(性能方面)?