- PR -

SQLに関して教えてください

1
投稿者投稿内容
インスパ
大ベテラン
会議室デビュー日: 2002/08/30
投稿数: 125
投稿日時: 2007-11-10 01:06
以下のようなSQLを組みたいのですがどうすればいいのかわかる方ご教授願います

テーブルは2つあります
・顧客テーブル
 顧客コード(PrimaryKey)
 顧客名

・販売テーブル
 顧客コード(PrimaryKey)
 販売日(PrimaryKey)
 販売金額

販売テーブルは顧客コード、販売日別で販売金額が複数レコード存在します

例えばデータ外かのように入っていた場合ですが

・顧客テーブル
 顧客コード 顧客名
11111 顧客1
22222 顧客2

・販売テーブル
 顧客コード 販売日  販売金額
11111 2007/9/1 100
11111 2007/10/1 200
11111 2007/11/1 300
22222 2007/9/2 500
22222 2007/10/2 400
22222 2007/11/2 100

現在日付(2007/11/9とします)より以前で150円以上の販売金額のデータを以下のように取得したいのですが
どのようなSQLを組めばいいのでしょうか?

顧客コード 顧客名  販売日  販売金額
11111 顧客1 2007/11/1 300
22222 顧客2 2007/10/2 400
shimix
ぬし
会議室デビュー日: 2004/08/05
投稿数: 512
お住まい・勤務地: 大分市
投稿日時: 2007-11-10 02:03
DBが書かれていないのでMS-Accessのデザインビューで作ったら(ぉぃ)こんなSQLになってました。

コード:
SELECT 販売テーブル.顧客コード, 顧客テーブル.顧客名, 販売テーブル.販売日, 販売テーブル.販売金額
FROM 販売テーブル INNER JOIN 顧客テーブル ON 販売テーブル.顧客コード = 顧客テーブル.顧客コード
WHERE (販売テーブル.販売日<=#11/9/2007#) AND (販売テーブル.販売金額>=150);




とりあえずはこちら↓あたりを眺めてみればどうでしょう?

http://www.pursue.ne.jp/SQLDoc/SQL.htm

http://www.pursue.ne.jp/jouhousyo/SQLDoc/select21.html

http://www.pursue.ne.jp/jouhousyo/SQLDoc/select12.html
インスパ
大ベテラン
会議室デビュー日: 2002/08/30
投稿数: 125
投稿日時: 2007-11-10 02:39
すみません、情報が足りませんでした。
DBはPostgreSQLです
また、条件も間違っていました

現在日付(2007/11/9とします)より以前で直近の日付でかつ
150円以上の販売金額のデータを以下のように取得したいのですが
どのようなSQLを組めばいいのでしょうか?
(顧客単位で1レコードを取得したいのです)

期待する結果
顧客コード 顧客名  販売日  販売金額
11111 顧客1 2007/11/1 300
22222 顧客2 2007/10/2 400
べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2007-11-10 09:36
ORACLEだと便利な関数とかあったりするのかもしれないけど(ていう下記SQL自体
無駄があるかもしれないけど)やりたいことはこんな感じですかね。

コード:
SELECT          顧客テーブル.顧客コード, 顧客テーブル.顧客名, 最近.Expr1, 
                      販売テーブル_1.販売金額
FROM            顧客テーブル LEFT OUTER JOIN
                          (SELECT          MAX(販売日) AS Expr1, 顧客コード
                             FROM             販売テーブル
                             WHERE            (販売金額 >= 150)
                             GROUP BY     顧客コード) AS 最近 ON 
                      最近.顧客コード = 顧客テーブル.顧客コード LEFT OUTER JOIN
                      販売テーブル AS 販売テーブル_1 ON 
                      最近.Expr1 = 販売テーブル_1.販売日 AND 
                      販売テーブル_1.顧客コード = 最近.顧客コード

上総
大ベテラン
会議室デビュー日: 2006/06/22
投稿数: 107
投稿日時: 2007-11-10 13:49
プログラムで、顧客コードを条件に1件1件処理を行うのであれば
下記のようになるかと。

コード:
SELECT      ALL
            顧客.顧客コード,
            顧客.顧客名,
            販売.販売日,
            販売.販売金額
FROM        顧客テーブル AS 顧客
INNER JOIN  販売テーブル AS 販売
ON          顧客.顧客コード = PGから渡される顧客コード
WHERE       販売.販売金額 >= 150
AND         販売.販売日 <= Current_Date
ORDER BY    販売.販売日 DESC
LIMIT       1



まとめてデータを取得するなら、べるさんの書き込み通りになると思います。
インスパ
大ベテラン
会議室デビュー日: 2002/08/30
投稿数: 125
投稿日時: 2007-11-11 03:42
皆さんありがとうございました、おかげさまで解決できそうです!
1

スキルアップ/キャリアアップ(JOB@IT)