Ik denk dat je met het onderstaande kunt bereiken wat je nodig hebt. Deze bewerkingen zijn zogenaamd "Group-wise Maximum".
Optie 1
Dit is het gemakkelijkst te begrijpen, een subquery retourneert maximaal TID
voor alle gebruikers sinds de max
wordt gebruikt in samen met Group By
en dan doen we een andere zoekopdracht om alle gegevens voor die ID's te krijgen.
Select TID, TData, TUserID, TViewedAt
From Test
Where TID In(
Select Max(TID)
From Test
Group By TUserID
)
Optie 2
Iets ingewikkelder om te begrijpen, maar hoogstwaarschijnlijk efficiënter. Dit werkt op de basis dat wanneer t1.TViewedAt
op zijn maximale waarde is, is er geen t2.TViewedAt
met een grotere waarde en de t2-rijwaarden zijn 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;
Resultaat
TID TData TUserID TViewedAt
4 test3 123 2012-10-05 00:00:00.000
5 test2 213 2012-10-03 00:00:00.000