我认为,通过以下操作,您可以实现所需的功能,这些操作称为“逐组最大值”。
选项1
这是最容易理解的,子查询将为
TID所有用户返回最大值,这
max是因为与
Group By和一起使用时,我们比另一个查询要获取这些ID的所有数据。
Select TID, TData, TUserID, TViewedAt From Test Where TID In( Select Max(TID) From Test Group By TUserID)
选项2
理解起来稍微复杂一点,但更有可能更有效。它的工作原理是,当
t1.TViewedAt处于最大值时,没有
t2.TViewedAt值具有更大的值,而t2行值将为
NULL。
SELECt t1.TID, t1.TData, t1.TUserID, t1.TViewedAtFROM Test t1LEFT JOIN Test t2 ON t1.TUserID = t2.TUserID AND t1.TViewedAt < t2.TViewedAtWHERe t2.TUserID IS NULL;
结果
TID TData TUserID TViewedAt4 test3 123 2012-10-05 00:00:00.0005 test2 213 2012-10-03 00:00:00.000



