板違いかもしれないのですが。。。SQLについて教えてください。
下記のYAOYAテーブルから
「顧客番号単位かつ最新受注日の 全フィールド情報を取得」
という事をおこないたいのですが、どのようにすればいいでしょうか?
SELECT MAX(受注日),顧客番号 FROM YAOYA GROUP BY 顧客番号
で最新受注日とその顧客番号までは取得できますが、
商品名、担当者のフィールドがMAXを含むSELECT文ではひっぱることができません。
すいませんが、お教えください。
【YAOYAテーブル】
顧客番号 受注日 商品名 担当者
10001 2004/8/1 イモ A
10004 2004/8/12 ダイコン B
10003 2004/8/2 キュウリ A
10001 2004/6/2 キュウリ A
10003 2004/9/1 ダイコン C
10003 2004/3/20 タマゴ B
10004 2004/8/30 クリ A
10002 2004/8/11 イチゴ C
やや無理矢理な感じはしますがサブクエリを使えば出来ます。
SELECT *
FROM [YAOYAテーブル]
WHERE([顧客番号] & [受注日] in (SELECT [顧客番号] & MAX([受注日]) FROM [YAOYAテーブル] GROUP BY [顧客番号]))
一応、Access で動作確認したけど今後、質問する場合は
環境(データベースの種類)は明記して下さい。
SELECT *
FROM YAOYA
INNER JOIN (SELECT MAX(受注日) as [DT],顧客番号 FROM YAOYA GROUP BY 顧客番号) AS T
ON YAOYA.受注日 = T.DT
WHERE YAOYA.顧客番号 = T.顧客番号
Order By YAOYA.顧客番号,YAOYA.商品名,YAOYA.担当者
…でどうでしょうか?
かぶっちゃった。ごめんなさい。
nanashiさん勉強になります。
SELECT * FROM (SELECT MAX(受注日) As 最新受注日,顧客番号 FROM YAOYA GROUP BY 顧客番号) As Tmp ,YAOYA
WHERE Tmp.顧客番号=YAOYA.顧客番号 AND Tmp.最新受注日=YAOYA.受注日
とか
皆様、早々のご回答ありがとうございます。
DBはJET4.0です。
できました!!
(特攻隊長まるるうさんのSQLで実現しています。)
もう一つお聞きしていいでしょうか。。。(甘ったれです。)
このSQLによる出力結果に、顧客マスタから顧客名をひっぱってきて
付与してやりたいのですがどのようにすればいいでしょうか。
【顧客マスタ】
顧客番号 顧客名
10001 フクドメ
10002 ミヤモト
10003 タカハシ
10004 ジョージマ
10005 ナカムラ
10006 タニ
10007 オガサワラ
10008 ワダ
10009 フジモト
特攻隊長まるるうさんのSQLは試してませんが、
LEFT JOIN(またはRIGHT JOIN)で出来ます。
私の例だとこんな感じで出来ます。
SELECT [YAOYA].[顧客番号], [受注日], [商品名], [担当者], [顧客名]
FROM [YAOYA] LEFT JOIN [顧客マスタ] on [YAOYA].[顧客番号] = [顧客マスタ].[顧客番号]
WHERE([YAOYA].[顧客番号] & [受注日] in (SELECT [顧客番号] & MAX([受注日]) FROM [YAOYA] GROUP BY [顧客番号]))
>できました!!
はいいんですが理解されましたか?
理解したならこのような質問がくるとは思えないですが。
そのままコピペじゃ進歩がないですよ。
で質問の回答は顧客マスタとYAOYAテーブルを選択して
FROM 顧客マスタ,YAOYA WHERE 顧客マスタ.顧客番号=YAOYA.顧客番号
とすればいいです。
ツイート | ![]() |