sql >> Databasteknik >  >> RDS >> Mysql

MySQL Group efter ID och Senaste Datetime

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


  1. mysql räknar inte rad två gånger om kolumndata dupliceras

  2. hur du gör din data horisontell

  3. Graduate Level Felhantering

  4. Android Room - Hur man återställer automatisk genererad tabell primärnyckel vid varje appkörning