Een manier om dit te doen die correct gebruikmaakt van 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
Hoe dit werkt:
- selecteert de laatste tijdstempel voor elke afzonderlijke
m_id
in de subquery - selecteert alleen rijen uit
table
die overeenkomen met een rij uit de subquery (deze bewerking -- waarbij een join wordt uitgevoerd, maar geen kolommen zijn geselecteerd uit de tweede tabel, het wordt alleen gebruikt als een filter -- staat bekend als een "semijoin" voor het geval je nieuwsgierig was) - ordent de rijen