dポイントプレゼントキャンペーン実施中!

「製品の販売状況が記録してあるテーブル」から、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販売状況
1002003/02/01  4終了
1002004/07/01  9出荷停止
1002004/08/01  2一時出荷停止
1002004/08/20  3販売停止
1002004/08/20  1終了
111 2003/01/15 5 終了
111 2004/05/10 6 出荷停止
111 2004/05/10 2 終了

A 回答 (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 )
    • good
    • 1
この回答へのお礼

回答ありがとうございます。お礼が遅くなり申し訳ありませんでした。

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

お礼日時:2004/08/23 16:05

一つのクエリでは無理なのでは?まず


・製品番号(グループ化/昇順)
・日付(最大)
で製品番号の最大日付を抽出
元のテーブルとこのクエリを連結(製品番号と日付)して
・製品番号(グループ化/昇順)
・日付(グループ化/昇順)
・ID(最大)
    • good
    • 1
この回答へのお礼

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

お礼日時:2004/08/20 13:45

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A