sql >> Base de Datos >  >> RDS >> Mysql

Usando ORDER BY y GROUP BY juntos

Una forma de hacer esto que usa correctamente 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

Cómo funciona esto:

  • selecciona la última marca de tiempo para cada m_id distinto en la subconsulta
  • solo selecciona filas de la table que coinciden con una fila de la subconsulta (esta operación, donde se realiza una unión, pero no se seleccionan columnas de la segunda tabla, solo se usa como filtro, se conoce como "semijoin" en caso de que tuvieras curiosidad)
  • ordena las filas