Mysql
 sql >> Database >  >> RDS >> Mysql

MySQL Raggruppa per ID e Datetime più recenti

Penso che con il seguente puoi ottenere ciò di cui hai bisogno, queste operazioni sono le cosiddette "Massime a livello di gruppo".

Opzione 1

Questo è il più facile da capire, una sottoquery restituirà il massimo TID per tutti gli utenti dal max viene utilizzato insieme a Group By e poi facciamo un'altra query per ottenere tutti i dati per quegli ID.

 Select TID, TData, TUserID, TViewedAt
 From Test 
 Where TID In(
    Select Max(TID)
    From Test
    Group By TUserID
)

Opzione 2

Leggermente più complesso da capire, ma molto probabilmente più efficiente, funziona sulla base del fatto che quando t1.TViewedAt è al suo valore massimo, non c'è t2.TViewedAt con un valore maggiore e i valori delle righe t2 saranno 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;

Risultato

TID TData   TUserID   TViewedAt
4   test3   123       2012-10-05 00:00:00.000
5   test2   213       2012-10-03 00:00:00.000