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

Verwenden Sie ORDER BY und GROUP BY zusammen

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