Ich denke, dass Sie mit dem Folgenden erreichen können, was Sie brauchen. Diese Operationen werden als "gruppenweises Maximum" bezeichnet.
Option 1
Dies ist am einfachsten zu verstehen, eine Unterabfrage gibt maximal TID
zurück für alle Benutzer seit dem max
wird zusammen mit Group By
verwendet und dann führen wir eine weitere Abfrage durch, um alle Daten für diese IDs zu erhalten.
Select TID, TData, TUserID, TViewedAt
From Test
Where TID In(
Select Max(TID)
From Test
Group By TUserID
)
Option 2
Etwas komplexer zu verstehen, aber höchstwahrscheinlich effizienter. Dies funktioniert auf der Grundlage, dass wenn t1.TViewedAt
auf seinem Maximalwert ist, gibt es kein t2.TViewedAt
mit einem größeren Wert und die Werte der t2-Zeilen sind 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;
Ergebnis
TID TData TUserID TViewedAt
4 test3 123 2012-10-05 00:00:00.000
5 test2 213 2012-10-03 00:00:00.000