- ベストアンサー
group byで最後のレコードを抽出したい
group byで特定のカラムをまとめる際に、最後(最新)のレコードを抽出したいのですが 最初(古い)の行が抽出されてしまいます。 例えば、threadカラムとuptimeカラムがあるテーブルBBSで threadカラムをgroup byでまとめる際にuptimeの降順(desc)でまとめたい場合 どのようにしたらいいでしょうか? 【テーブルBBS】 id thread uptime 1 1 1230100000 2 2 1230200000 3 1 1230300000 4 3 1230400000 5 1 1230500000 6 2 1230600000 select * form bbs group by thread order by uptime desc だと thread uptime 3 1230400000 1 1230300000 2 1230200000 になってしまいます。 次のような結果を表示するにはどのようにしたらいいでしょうか。 thread uptime 2 1230600000 1 1230500000 3 1230400000 また、DISTINCTを使うと同じフィールド内に重複したレコードがある場合は最初のレコードのみ表示されますが、最後のレコードのみ表示するにはどのようにすればいいのでしょうか? よろしくお願い致します。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
単にthread毎にまとめた最大のuptimeをとるだけですよね? select thread,max(uptime) as uptime form bbs group by thread order by uptime desc これにidの情報がほしいということだと、サブクエリが必要になります
その他の回答 (1)
- nora1962
- ベストアンサー率60% (431/717)
明示的に select thread,uptime from ( select thread,max(uptime) as uptime from bbs group by thread ) order by uptime desc と書けばいいのでは。 > また、DISTINCTを使うと同じフィールド内に重複したレコードがある場合 > は最初のレコードのみ表示されますが、最後のレコードのみ表示するには > どのようにすればいいのでしょうか? これは具体的にはどんな現象でしょうか?
お礼
どうもありがとうございました。 助かりました。
お礼
どうもありがとうございました。 助かりました。