Jag tror att med nedanstående kan du uppnå det du behöver. Dessa operationer är så kallade "Gruppmässigt Maximum".
Alternativ 1
Detta är det enklaste att förstå, en underfråga kommer att returnera maximalt TID
för alla användare sedan max
används i tillsammans med Group By
och sedan gör vi en annan fråga för att få all data för dessa ID:n.
Select TID, TData, TUserID, TViewedAt
From Test
Where TID In(
Select Max(TID)
From Test
Group By TUserID
)
Alternativ 2
Något mer komplicerat att förstå, men troligen mer effektivt. Detta fungerar utifrån att när t1.TViewedAt
är på sitt maximala värde, finns det ingen t2.TViewedAt
med ett högre värde och värdena för t2 rader blir 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;
Resultat
TID TData TUserID TViewedAt
4 test3 123 2012-10-05 00:00:00.000
5 test2 213 2012-10-03 00:00:00.000