• ベストアンサー

SQLの質問です

SQL初心者の質問です。下記のように違うdateを持つ同じgrade_idがいくつか存在するテーブルから、最新のdateのgrade_idを選択してその列の他の情報(point)も持って来たい場合、どんなSQL文が最適でしょうか?Disthinctを使ってもうまくできずに困っています…よろしくお願い致します。 id date grade_id point 1 2008/05/01 1 6 2 2008/10/01 1 1 3 2000/08/08 2 2 4 2008/05/01 2 8

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

  • ベストアンサー
  • nda23
  • ベストアンサー率54% (777/1415)
回答No.2

No1の方のSQLがヒントです。最新日付と結合するデータが、目的のデータと考えます。 SELECT A.* FROM TTT AS A INNER JOIN (SELECT MAX([date]) AS MaxDate,grade_id FROM TTT GROUP BY grade_id) AS B ON A.[date]=B.MaxDate AND A.grade_id=B.grade_id テーブル名をTTTと仮定しました。 dateはAccessでは組込み関数名と同名なので、[]を付けました。 全てのフィールドが同じになるレコードが無い場合はDISTINCTは不要です。

noname#169207
質問者

お礼

ご回答ありがとうございました! 試させて頂きましたら希望通りのクエリができました! こういうSQLの作り方があるのだととても勉強になりました。 DISTINCTの利用についても参考になりました。 どうもありがとうございました。

その他の回答 (1)

  • kero_mio
  • ベストアンサー率90% (94/104)
回答No.1

ご提示頂いたテーブル名を「TEST」と定義してお話しますね。 いろんなやり方がありますが、私なら、 SELECT MAX(date), grade_id, point FROM TEST GROUP BY grade_id, point とかやりますね。試してないので確実ではないですが、 一度、上記のイメージでやってみてください。 ちなみに、関係ありませんが、「Disthinct」ではなく、「DISTINCT」が正しいスペルになりますので、今後スペルミスに気を付けてみてください。

noname#169207
質問者

お礼

はじめまして、ご回答ありがとうございました! 早速ご回答頂いたSQLを試してみましたが、同じgrade_idの物が出てきてしまいました。 ちなみに現在使用しているのはAccessのクエリなんですが、Access固有のルール等に左右されたりする事もあるのでしょうか? DISTINCT ON が使えれば簡単そうに思えたのですが、Accessは使えないみたいですし… 「Disthinct」←×「DISTINCT」←○ 投稿後に気づきました(^^;; 今回初めての投稿だったのですが、間違って2重投稿もしてしまって色々反省しております。 これからは気をつけて利用したいと思っています。

関連するQ&A