• ベストアンサー

【Access】選択クエリのグループ化で最大日付の中の最大IDを抽出する方法?

「製品の販売状況が記録してあるテーブル」から、Accessの選択クエリのグループ化を利用して、「1つの製品番号に対し、最大日付の中の最大IDを抽出する」というアクションを行いたいのです。 例えば下の<テーブル例>だったら、  ●製品100・・・2004/08/20 ID3 販売停止  ●製品111・・・2004/05/10 ID6 出荷停止 を取り出したい訳です。 ・製品番号(グループ化/昇順) ・日付(グループ化/昇順/最大) ・ID(グループ化/昇順/最大) という選択クエリを組んだのですが、抽出結果は  ●製品100・・・2004/08/20 ID9 販売停止  ●製品111・・・2004/05/10 ID6 出荷停止 を選んでしまいます。 違うのに! そんな事したいんじゃないのに!(ToT) どなたか詳しい方、助けてください。 <アクション> 製品の販売状況が記録してあるテーブルから、『最大の日付で最大のID』の「販売状況」を抽出したい。 <テーブル例> 製品番号 日付   ID 販売状況 100 2003/02/01  4 終了 100 2004/07/01  9 出荷停止 100 2004/08/01  2 一時出荷停止 100 2004/08/20  3 販売停止 100 2004/08/20  1 終了 111 2003/01/15 5 終了 111 2004/05/10 6 出荷停止 111 2004/05/10 2 終了

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

  • ベストアンサー
回答No.2

ロジック的には No.1 の方の方法と同じことなんですが、Access 2000 のあたりから SQL の中にサブクエリーを記述できるようなので(記憶が定かではないのですが、Access97 まではできなかったような気がします。)、Access 2000 以降であれば、クエリーの SQL ビューに次のように記述すれば目的の抽出が可能です。 (テーブルを T_販売状況 としています。) SELECT T3.製品番号, T3.日付, T3.MAXID, T4.販売状況 FROM T_販売状況 AS T4 INNER JOIN ( SELECT T1.製品番号, T1.日付, MAX(T1.ID) AS MAXID FROM T_販売状況 AS T1 INNER JOIN ( SELECT 製品番号, MAX(日付) AS MAX日付 FROM T_販売状況 GROUP BY 製品番号) AS T2 ON ( ( T1.製品番号=T2.製品番号) AND (T1.日付=T2.MAX日付) ) GROUP BY T1.製品番号, T1.日付) AS T3 ON ( T3.製品番号 = T4.製品番号 AND T3.日付 = T4.日付 AND T3.MAXID = T4.ID )

yakiniku_love
質問者

お礼

回答ありがとうございます。お礼が遅くなり申し訳ありませんでした。 なるほど・・・SQLを組むんですね?SQLか・・・ふぅ(ため息)。でも私はダメでも同僚はSQLもいけると思うので、彼女にこの回答を元に考えてもらおうと思います。 ありがとうございました。

その他の回答 (1)

  • mshr1962
  • ベストアンサー率39% (7417/18945)
回答No.1

一つのクエリでは無理なのでは?まず ・製品番号(グループ化/昇順) ・日付(最大) で製品番号の最大日付を抽出 元のテーブルとこのクエリを連結(製品番号と日付)して ・製品番号(グループ化/昇順) ・日付(グループ化/昇順) ・ID(最大)

yakiniku_love
質問者

お礼

早速の回答、ありがとうございます。 そうなんですよね。 クエリを複数回組めば取り出せるんですが・・・。 同僚と「1回のクエリで取り出せなかったっけ?今までは出来ていたと思うんだけど」という話になりまして。 「今まで出来ていた」と思い込んでいたのは、単にデータ内容にそういうものがなかっただけかも・・・という気もして来ました。1回のクエリで終われば簡単なのに・・・ダメなのかなあ(^^;)