Je pense qu'avec ce qui suit, vous pouvez obtenir ce dont vous avez besoin. Ces opérations sont appelées "Group-wise Maximum".
Option 1
C'est le plus simple à comprendre, une sous-requête renverra au maximum TID
pour tous les utilisateurs depuis le max
est utilisé avec Group By
puis nous effectuons une autre requête pour obtenir toutes les données de ces identifiants.
Select TID, TData, TUserID, TViewedAt
From Test
Where TID In(
Select Max(TID)
From Test
Group By TUserID
)
Option 2
Légèrement plus complexe à comprendre, mais probablement plus efficace, cela fonctionne sur la base que lorsque t1.TViewedAt
est à sa valeur maximale, il n'y a pas de t2.TViewedAt
avec une valeur supérieure et les valeurs des lignes t2 seront 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;
Résultat
TID TData TUserID TViewedAt
4 test3 123 2012-10-05 00:00:00.000
5 test2 213 2012-10-03 00:00:00.000