Une façon de faire cela qui utilise correctement 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
Comment cela fonctionne :
- sélectionne le dernier horodatage pour chaque
m_id
distinct dans la sous-requête - sélectionne uniquement les lignes de
table
qui correspondent à une ligne de la sous-requête (cette opération -- où une jointure est effectuée, mais aucune colonne n'est sélectionnée dans la deuxième table, elle est simplement utilisée comme filtre -- est connue sous le nom de "semijoin" au cas où vous seriez curieux) - ordonne les lignes