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