Eine Möglichkeit, dies zu tun, verwendet korrekterweise group by
:
select l.*
from table l
inner join (
select
m_id, max(timestamp) as latest
from table
group by m_id
) r
on l.timestamp = r.latest and l.m_id = r.m_id
order by timestamp desc
Wie das funktioniert:
- wählt den neuesten Zeitstempel für jede einzelne
m_id
aus in der Unterabfrage - wählt nur Zeilen aus
table
aus die mit einer Zeile aus der Unterabfrage übereinstimmen (diese Operation – bei der eine Verknüpfung durchgeführt wird, aber keine Spalten aus der zweiten Tabelle ausgewählt werden, sondern nur als Filter verwendet wird – ist als "Semijoin" falls Sie neugierig waren) - ordnet die Zeilen