Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL Group by ID und Latest Datetime

Ich denke, dass Sie mit dem Folgenden erreichen können, was Sie brauchen. Diese Operationen werden als "gruppenweises Maximum" bezeichnet.

Option 1

Dies ist am einfachsten zu verstehen, eine Unterabfrage gibt maximal TID zurück für alle Benutzer seit dem max wird zusammen mit Group By verwendet und dann führen wir eine weitere Abfrage durch, um alle Daten für diese IDs zu erhalten.

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

Option 2

Etwas komplexer zu verstehen, aber höchstwahrscheinlich effizienter. Dies funktioniert auf der Grundlage, dass wenn t1.TViewedAt auf seinem Maximalwert ist, gibt es kein t2.TViewedAt mit einem größeren Wert und die Werte der t2-Zeilen sind 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;

Ergebnis

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