Saya pikir dengan di bawah ini Anda dapat mencapai apa yang Anda butuhkan, Operasi ini disebut "Group-wise Maximum".
Opsi 1
Ini adalah yang paling mudah dipahami, subquery akan mengembalikan TID
maksimum untuk semua pengguna sejak max
digunakan bersama dengan Group By
dan daripada kami melakukan kueri lain untuk mendapatkan semua data untuk ID tersebut.
Select TID, TData, TUserID, TViewedAt
From Test
Where TID In(
Select Max(TID)
From Test
Group By TUserID
)
Opsi 2
Sedikit lebih rumit untuk dipahami, tetapi kemungkinan besar lebih efisien, Ini bekerja atas dasar bahwa ketika t1.TViewedAt
berada pada nilai maksimumnya, tidak ada t2.TViewedAt
dengan nilai yang lebih besar dan nilai baris t2 akan menjadi 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;
Hasil
TID TData TUserID TViewedAt
4 test3 123 2012-10-05 00:00:00.000
5 test2 213 2012-10-03 00:00:00.000