Мисля, че с посоченото по-долу можете да постигнете това, от което се нуждаете. Тези операции са така наречените „Групови максимуми“.
Опция 1
Това е най-лесното за разбиране, подзаявка ще върне максимален TID
за всички потребители след max
се използва заедно с Group By
и след това правим друга заявка, за да получим всички данни за тези идентификатори.
Select TID, TData, TUserID, TViewedAt
From Test
Where TID In(
Select Max(TID)
From Test
Group By TUserID
)
Вариант 2
Малко по-сложен за разбиране, но най-вероятно по-ефективен, Това работи на базата, че когато t1.TViewedAt
е на максималната си стойност, няма t2.TViewedAt
с по-голяма стойност и стойностите на t2 редове ще бъдат 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;
Резултат
TID TData TUserID TViewedAt
4 test3 123 2012-10-05 00:00:00.000
5 test2 213 2012-10-03 00:00:00.000