Myslím si, že níže uvedeným způsobem můžete dosáhnout toho, co potřebujete. Tyto operace se nazývají „maximální skupinové maximum“.
Možnost 1
Toto je nejsnáze pochopitelné, poddotaz vrátí maximum TID
pro všechny uživatele od max
se používá společně s Group By
a poté provedeme další dotaz, abychom získali všechna data pro tato ID.
Select TID, TData, TUserID, TViewedAt
From Test
Where TID In(
Select Max(TID)
From Test
Group By TUserID
)
Možnost 2
Poněkud složitější na pochopení, ale s největší pravděpodobností efektivnější. Funguje to na základě toho, že když t1.TViewedAt
je na maximální hodnotě, neexistuje žádný t2.TViewedAt
s vyšší hodnotou a hodnoty t2 řádků budou 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;
Výsledek
TID TData TUserID TViewedAt
4 test3 123 2012-10-05 00:00:00.000
5 test2 213 2012-10-03 00:00:00.000