Mysql
 sql >> Base de données >  >> RDS >> Mysql

Utiliser ORDER BY et GROUP BY ensemble

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