Jeden způsob, jak toho dosáhnout, který správně používá 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
Jak to funguje:
- vybere nejnovější časové razítko pro každé odlišné
m_id
v dílčím dotazu - vybere pouze řádky z
table
které odpovídají řádku z poddotazu (tato operace – kde se provede spojení, ale nejsou vybrány žádné sloupce z druhé tabulky, používá se pouze jako filtr – je známá jako "semijoin" pro případ, že by vás to zajímalo) - uspořádá řádky