SQLの初歩的な質問(と思います。。)


ゴリ  2004-08-18 11:38:20  No: 115704  IP: [192.*.*.*]

板違いかもしれないのですが。。。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

編集 削除
nanahsi  2004-08-18 12:25:39  No: 115705  IP: [192.*.*.*]

やや無理矢理な感じはしますがサブクエリを使えば出来ます。

SELECT *
FROM [YAOYAテーブル]
WHERE([顧客番号] & [受注日] in (SELECT [顧客番号] & MAX([受注日]) FROM [YAOYAテーブル] GROUP BY [顧客番号]))

編集 削除
特攻隊長まるるう  2004-08-18 12:25:45  No: 115706  IP: [192.*.*.*]

一応、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.担当者

…でどうでしょうか?

編集 削除
特攻隊長まるるう  2004-08-18 12:28:49  No: 115707  IP: [192.*.*.*]

かぶっちゃった。ごめんなさい。
nanashiさん勉強になります。

編集 削除
Max  2004-08-18 12:43:30  No: 115708  IP: [192.*.*.*]

SELECT * FROM (SELECT MAX(受注日) As 最新受注日,顧客番号 FROM YAOYA GROUP BY 顧客番号) As Tmp ,YAOYA
WHERE Tmp.顧客番号=YAOYA.顧客番号 AND Tmp.最新受注日=YAOYA.受注日

とか

編集 削除
ゴリ  2004-08-18 14:09:28  No: 115709  IP: [192.*.*.*]

皆様、早々のご回答ありがとうございます。
DBはJET4.0です。

できました!!
(特攻隊長まるるうさんのSQLで実現しています。)

もう一つお聞きしていいでしょうか。。。(甘ったれです。)
このSQLによる出力結果に、顧客マスタから顧客名をひっぱってきて
付与してやりたいのですがどのようにすればいいでしょうか。

【顧客マスタ】
顧客番号  顧客名      
 10001  フクドメ
 10002  ミヤモト
 10003  タカハシ 
 10004  ジョージマ
 10005  ナカムラ
 10006  タニ
 10007  オガサワラ
 10008  ワダ
 10009  フジモト

編集 削除
nanashi  2004-08-18 14:26:16  No: 115710  IP: [192.*.*.*]

特攻隊長まるるうさんのSQLは試してませんが、
LEFT JOIN(またはRIGHT JOIN)で出来ます。
私の例だとこんな感じで出来ます。

SELECT [YAOYA].[顧客番号], [受注日], [商品名], [担当者], [顧客名]
FROM [YAOYA] LEFT JOIN [顧客マスタ] on [YAOYA].[顧客番号] = [顧客マスタ].[顧客番号]
WHERE([YAOYA].[顧客番号] & [受注日] in (SELECT [顧客番号] & MAX([受注日]) FROM [YAOYA] GROUP BY [顧客番号]))

編集 削除
Max  2004-08-18 14:29:33  No: 115711  IP: [192.*.*.*]

>できました!!
はいいんですが理解されましたか?
理解したならこのような質問がくるとは思えないですが。
そのままコピペじゃ進歩がないですよ。

で質問の回答は顧客マスタとYAOYAテーブルを選択して
FROM 顧客マスタ,YAOYA WHERE 顧客マスタ.顧客番号=YAOYA.顧客番号
とすればいいです。

編集 削除