Myślę, że dzięki poniższym możesz osiągnąć to, czego potrzebujesz. Operacje te są tak zwane „Maksymalne grupowe”.
Opcja 1
Jest to najłatwiejsze do zrozumienia, podzapytanie zwróci maksymalny TID
dla wszystkich użytkowników od max
jest używany razem z Group By
a następnie wykonujemy inne zapytanie, aby uzyskać wszystkie dane dla tych identyfikatorów.
Select TID, TData, TUserID, TViewedAt
From Test
Where TID In(
Select Max(TID)
From Test
Group By TUserID
)
Opcja 2
Nieco bardziej skomplikowane do zrozumienia, ale najprawdopodobniej bardziej wydajne. Działa to na podstawie tego, że gdy t1.TViewedAt
osiąga maksymalną wartość, nie ma t2.TViewedAt
z większą wartością, a wartości wierszy t2 będą wynosić 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;
Wynik
TID TData TUserID TViewedAt
4 test3 123 2012-10-05 00:00:00.000
5 test2 213 2012-10-03 00:00:00.000