Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Usando ORDER BY e GROUP BY juntos


Uma maneira de fazer isso que usa corretamente 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

Como isso funciona:
  • seleciona o carimbo de data/hora mais recente para cada m_id distinto na subconsulta
  • seleciona apenas linhas da table que correspondem a uma linha da subconsulta (esta operação -- onde uma junção é realizada, mas nenhuma coluna é selecionada da segunda tabela, ela é usada apenas como um filtro -- é conhecida como "semijoin" caso você tenha curiosidade)
  • ordena as linhas