以下で必要なことを達成できると思います。これらの操作はいわゆる「グループ単位の最大値」です。
オプション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.TViewedAt
FROM Test t1
LEFT JOIN Test t2 ON t1.TUserID = t2.TUserID AND t1.TViewedAt < t2.TViewedAt
WHERE t2.TUserID IS NULL;
結果
TID TData TUserID TViewedAt
4 test3 123 2012-10-05 00:00:00.000
5 test2 213 2012-10-03 00:00:00.000