Mysql
 sql >> Database >  >> RDS >> Mysql

Usando ORDER BY e GROUP BY insieme

Un modo per farlo utilizza correttamente 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

Come funziona:

  • seleziona l'ultimo timestamp per ogni m_id distinto nella sottoquery
  • seleziona solo le righe da table che corrisponde a una riga della sottoquery (questa operazione -- in cui viene eseguito un join, ma non vengono selezionate colonne dalla seconda tabella, viene solo utilizzata come filtro -- è nota come "semijoin" nel caso foste curiosi)
  • ordina le righe