- ベストアンサー
MySQLでグループ内での最大値の行を取得
- MySQLを使用して、テーブル内のグループごとに最大値の行を取得したいです。
- 具体的には、各IDごとに、dateが最新でnoが大きい行を取り出したいです。
- 現在、MAXやWHEREを使用してサブクエリを作成しましたが、うまく取り出せません。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
ああ、ごめんなさい、dateが先でしたね select id,no,date,content from hoge where (id,no,date) in( select id,max(no),date from hoge where (id,date) in (select id,max(date) from hoge group by id) group by id,date);
その他の回答 (4)
- nora1962
- ベストアンサー率60% (431/717)
select * from tbl t1 where not exists ( select 1 from tbl t2 where t1.id=t2.id and (t1.date, t1.no ) < (t2.date, t2.no ) ); というやり方もあります。
お礼
これもシンプルですね。 ありがとうございます。 今後の参考にさせていただきます。
- yambejp
- ベストアンサー率51% (3827/7415)
なんか考えすぎじゃない? select id,no,date,content from hoge where (id,no) in (select id,max(no) from hoge group by id);
- o_chi_chi
- ベストアンサー率45% (131/287)
下記のSQLでどうですか ---- SELECT b.* FROM T_TEST b INNER JOIN (SELECT a.id, a.[date], MAX(a.no) AS mno FROM T_TEST a INNER JOIN (SELECT id, MAX([date]) AS mdate FROM T_TEST GROUP BY id) g1 --idでグループし最大のdateを取得 ON a.id = g1.id AND a.[date] = g1.mdate GROUP BY a.id, a.[date]) g2 --idと最大dateでグループし最大のnoを取得 ON b.id = g2.id AND b.[no] = g2.mno AND b.[date] = g2.[date]
お礼
ありがとうございます。 何となくですが理解できました。
- yambejp
- ベストアンサー率51% (3827/7415)
条件提示が必要です。 idとnoのデータ型はなんでしょうか? noの最大値は必ずユニークなのでしょうか? 言い換えればidとnoの組合せは必ずユニークなのでしょうか?
お礼
ありがとうございます。 シンプルでわかりやすく、無事解決しました、