group by
を正しく使用するこれを行う1つの方法 :
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
仕組み:
- 個別の
m_id
ごとに最新のタイムスタンプを選択します サブクエリ内 -
table
から行のみを選択します サブクエリの行に一致するもの(この操作-結合は実行されますが、2番目のテーブルから列が選択されていないため、フィルターとして使用されます-は"セミジョイン" 興味があった場合に備えて) - 行を並べ替えます