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