• ベストアンサー

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 ←取得対象 よろしくお願いいたします。

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

  • ベストアンサー
  • tksoft
  • ベストアンサー率36% (99/273)
回答No.1

SELECT 識別番号, MAX(年月日), 検索項目, ソートキー FROM テーブル名 WHERE 検索項目 = '001' GROUP BY 識別番号, 検索項目, ソートキー ORDER BY ソートキー てな感じではどうでしょう。 年月日はMAX関数で、それ以外の項目はグループ化してしまいます。

ashbury1713
質問者

お礼

早速の回答ありがとうございます。 select max(xx),a,b,c・・・ にしてしまうと、a,b,cの項目が、max(xx)のレコードとは 限らなくなってしまうような気がするのですが。 かといってテーブルの全ての項目をGroup byするのも 難しいですし。。。 他のアイディアも募集しています。

ashbury1713
質問者

補足

自己レスです。 SELECT * FROM TABLE WHERE 検索項目='001' AND 年月日=(SELECT MAX(年月日) FROM TABLE GROUP BY 識別番号) ORDER BY ソートキー でいけそうな気がするのですが、ご意見お願いいたします。(文法エラー??) 初心者ですいません。。。

その他の回答 (1)

  • 7marine
  • ベストアンサー率36% (59/160)
回答No.2

SELECT * FROM TABLE WHERE 検索項目='001' AND 年月日 in (SELECT MAX(年月日) FROM TABLE GROUP BY 識別番号) <-- = ではなく in ORDER BY ソートキー これでどうでしょう?

ashbury1713
質問者

お礼

ありがとうございます。 等価でもいけると思ったのですが、やはり一般的にinなのでしょうか? ご指摘の通りで試してみようと思います。ありがとうございました!

関連するQ&A