- ベストアンサー
SQL記述の質問
SQLを書くにあたって悩んでいます。 簡単なようで何となく頭がこんがらがってしまっているので、 教えていただけないでしょうか? テーブル (識別番号+年月日でPK) 識別番号 年月日 検索項目 ソートキー ----------------------------------- 001 11/31 001 003 001 10/31 001 003 001 10/01 001 003 002 11/31 001 002 002 10/31 001 002 002 10/01 001 002 003 11/31 001 001 003 10/31 001 001 003 10/01 001 001 上のようなテーブルを以下の条件で検索したいです。 1)検索項目='001' 2)同一識別番号で年月日が最大のもの 3)ソートキーの昇順 ★結果のイメージ 識別番号 年月日 検索項目 ソートキー ----------------------------------- 003 11/31 001 001 ←取得対象 002 11/31 001 002 ←取得対象 001 11/31 001 003 ←取得対象 よろしくお願いいたします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
SELECT 識別番号, MAX(年月日), 検索項目, ソートキー FROM テーブル名 WHERE 検索項目 = '001' GROUP BY 識別番号, 検索項目, ソートキー ORDER BY ソートキー てな感じではどうでしょう。 年月日はMAX関数で、それ以外の項目はグループ化してしまいます。
その他の回答 (1)
- 7marine
- ベストアンサー率36% (59/160)
SELECT * FROM TABLE WHERE 検索項目='001' AND 年月日 in (SELECT MAX(年月日) FROM TABLE GROUP BY 識別番号) <-- = ではなく in ORDER BY ソートキー これでどうでしょう?
お礼
ありがとうございます。 等価でもいけると思ったのですが、やはり一般的にinなのでしょうか? ご指摘の通りで試してみようと思います。ありがとうございました!
お礼
早速の回答ありがとうございます。 select max(xx),a,b,c・・・ にしてしまうと、a,b,cの項目が、max(xx)のレコードとは 限らなくなってしまうような気がするのですが。 かといってテーブルの全ての項目をGroup byするのも 難しいですし。。。 他のアイディアも募集しています。
補足
自己レスです。 SELECT * FROM TABLE WHERE 検索項目='001' AND 年月日=(SELECT MAX(年月日) FROM TABLE GROUP BY 識別番号) ORDER BY ソートキー でいけそうな気がするのですが、ご意見お願いいたします。(文法エラー??) 初心者ですいません。。。