sql >> Database >  >> RDS >> Mysql

MySQL-groep op ID en laatste datum/tijd

Ik denk dat je met het onderstaande kunt bereiken wat je nodig hebt. Deze bewerkingen zijn zogenaamd "Group-wise Maximum".

Optie 1

Dit is het gemakkelijkst te begrijpen, een subquery retourneert maximaal TID voor alle gebruikers sinds de max wordt gebruikt in samen met Group By en dan doen we een andere zoekopdracht om alle gegevens voor die ID's te krijgen.

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

Optie 2

Iets ingewikkelder om te begrijpen, maar hoogstwaarschijnlijk efficiënter. Dit werkt op de basis dat wanneer t1.TViewedAt op zijn maximale waarde is, is er geen t2.TViewedAt met een grotere waarde en de t2-rijwaarden zijn 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;

Resultaat

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. MS SQL Server kruistabelbeperking

  2. PostgreSQL schalen met behulp van verbindingspoolers en load balancers

  3. Roep pusher op wanneer mysql is gewijzigd

  4. DB_NAME() versus ORIGINAL_DB_NAME() in SQL Server:wat is het verschil?