質問: groupの中の条件に合致するデータを抜き出したい groupの中の条件に合致するデータを抜き出したい いくつかのテーブルからgroupでくくったデータを抜き出しました。 その中から条件に合致するデータに絞りたいのですが、 思った結果となってくれません。 db:mysql 5.1.50 以下のようなことをしたいと考えています。 [元のデータ] id | 日付 | 担当 | 金額 a-01 |2010-09-01 |angas |1000 a-01 |2010-08-31 |mayor |1500 a-01 |2010-08-25 |angas |2000 b-01 |2010-08-30 |roger |1350 b-01 |2010-09-01 |angas |2000 b-01 |2010-08-20 |roger |1350 [結果として欲しいデータ] id | 日付 | 担当 | 金額 a-01 |2010-09-01 |angas |1000 a-01 |2010-08-31 |mayor |1500 b-01 |2010-08-30 |roger |1350 b-01 |2010-09-01 |angas |2000 ちょっとデータ例が貧弱ですが・・・ idと担当でグループ化した中で、日付が最も大きいレコードを抜き出したい。 というのが目的です。 どのようにsqlを書くと良いのでしょうか? idと担当でグループ化までは書けたのですが、 「グループのデータの中で日付で降順としたものの最新」というのを どのように書いたものか悩んでいます。 ps.こういうsqlの書き方で悩んだ時に、どうやって情報を集めると 良い情報に出合えるかの助言も頂ければ助かります。 よろしくお願いします。
回答: #3です。 >『同じテーブルを、id、担当で結びつけ、 >bにaの日付より大きなものが無い >aのデータを抽出する。』 そうですね。 自分より大きい日付が存在しない = 自分が一番大きい日付 ということです。 #2さんの書かれている、 >order by した上位のものがgroup byで優先されるという保証はありません。 >またgroup byした場合、日付と金額の紐づけも確実ではありません。 ですが、group by というのは標準のsqlでは 集約項目を除いたselect項目を全て記述する必要があります。 mysqlではそれを拡張し、group by にない項目もselectできるようになっています。 ただし、その項目の値がグループ内で一定でない場合は結果も一定にはなりません。 下記にそのことが書かれています。 http://dev.mysql.com/doc/refman/5.1/ja/group-by-hidden-fields.html