• ベストアンサー

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を使うと同じフィールド内に重複したレコードがある場合は最初のレコードのみ表示されますが、最後のレコードのみ表示するにはどのようにすればいいのでしょうか? よろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

単にthread毎にまとめた最大のuptimeをとるだけですよね? select thread,max(uptime) as uptime form bbs group by thread order by uptime desc これにidの情報がほしいということだと、サブクエリが必要になります

iiw2
質問者

お礼

どうもありがとうございました。 助かりました。

その他の回答 (1)

  • nora1962
  • ベストアンサー率60% (431/717)
回答No.1

明示的に select thread,uptime from ( select thread,max(uptime) as uptime from bbs group by thread ) order by uptime desc と書けばいいのでは。 > また、DISTINCTを使うと同じフィールド内に重複したレコードがある場合 > は最初のレコードのみ表示されますが、最後のレコードのみ表示するには > どのようにすればいいのでしょうか? これは具体的にはどんな現象でしょうか?

iiw2
質問者

お礼

どうもありがとうございました。 助かりました。