Mysql
 sql >> Base de données >  >> RDS >> Mysql

Groupe MySQL par ID et dernière date et heure

Je pense qu'avec ce qui suit, vous pouvez obtenir ce dont vous avez besoin. Ces opérations sont appelées "Group-wise Maximum".

Option 1

C'est le plus simple à comprendre, une sous-requête renverra au maximum TID pour tous les utilisateurs depuis le max est utilisé avec Group By puis nous effectuons une autre requête pour obtenir toutes les données de ces identifiants.

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

Option 2

Légèrement plus complexe à comprendre, mais probablement plus efficace, cela fonctionne sur la base que lorsque t1.TViewedAt est à sa valeur maximale, il n'y a pas de t2.TViewedAt avec une valeur supérieure et les valeurs des lignes t2 seront 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;

Résultat

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