2017-09-21 13 views
2

私はどこに一意の顧客IDであるデータベースを持っています。SQL:2つの条件をどのように使用するか依存関係?

私は指定製品の前にどのような製品を購入したのか知っておくべきこと。私は指定されたIDがバナナを買ったときにリストを持っています。その前にすべての製品と日付を検索したいのです。

例I持っているデータ:

CustomerID Product Date 
123  banana 2015-03-15 
111  banana 2014-07-09 
321  banana 2013-04-03 

私はその日の前に購入したものをお客様のすべての製品を検索するSQLをコマンド書くことができますどのように? 例

CustomerID Product Date 
123  Apple 2014-05-07 
123  Kiwi 2014-05-06 
123  Pen  2012-12-12 
111  Pen  2014-07-07 
111  Milk 2010-01-30 
321  Milk 2012-02-12 
+0

あなたは特定の日付を持っていますか?Plsには –

+0

@HardeepSinghと記載されています。特定の顧客が製品** X **を購入した日によってその日付が異なるため、 。 –

+0

あなたは顧客ID –

答えて

2

これはうまくいくはずです。テーブル名は工夫されているため、テーブル名を置き換える必要があります。

私は、これはあなたが望むものであるのかはわからないが、それを試してみると、結果を見て
SELECT CustomerID, Product, Date 
FROM ProductTable p1 
WHERE Date < (
    SELECT MAX(Date) 
    FROM ProductTable p2 
    WHERE p2.CustomerID = p1.CustomerID AND p2.Product = 'banana' 
) 
ORDER BY CustomerID, Date; 
0

SELECT * FROM tableA AS a 
     JOIN tableA AS b 
     ON a.CustomerID = b.CustomerID AND a.Date > b.Date 
ORDER BY a.CustomerID, a.Product, a.Date 
0

次の2つのテーブル、顧客IDのリストを持つ最初のテーブルを持っています、特定の製品の日付、およびその顧客に販売された製品の履歴を示す2番目の表が含まれています。

私たちは、それぞれLISTHISTそれらを呼び出します、あなたがあなたの所望の出力を得ることができます。

SELECT p1.CustomerID, p2.Product, p2.Date 
FROM LIST p1 
left join HIST p2 on p2.CustomerID = p1.CustomerID AND P1.Date > P2.Date 
ORDER BY p1.CustomerID, p2.Date; 
2

@Peter Abolinsの答えは正しいのですが、顧客はまだバナナを買ったことがないときケースを処理しません。 。このような場合を扱うために

、要求はなる:

SELECT CustomerID, Product, Date 
FROM ProductTable p1 
WHERE Date < (
    SELECT IFNULL (
     (SELECT MAX(Date) 
     FROM ProductTable p2 
     WHERE p2.CustomerID = p1.CustomerID AND p2.Product = 'banana'), 
     '9999-12-31' 
     ) 
) 
ORDER BY CustomerID, Date; 

PS:私は、これがコメントであることを知っているが、私はまだこのアカウントでコメントすることはできません。

+0

を言及しなければなりません。顧客が決してバナナを買ったことがないならば、論理的には、買うことは決してありません。それはすべて、OPが望むものに依存します。あなたのソリューションは、将来彼らがバナナを購入することを前提としているので、今まで購入したものすべてがリストされます。 –

+1

堅牢性の観点から、私はあなたの解決策に同意しますが、バナナを買ったことがない人は、「1970-01-01」に設定することもできます。そして、これは私の考えではもっと正しいでしょう。 –

+1

はい、私はあなたに同意し、日付を '1970-01-01'に設定することも意味があります。すべては、OPのニーズに依存します。私がバナナの購入を決して買わなかったならば、すべての製品を手に入れることは、「バナナの購入を「リストを閉じる限界」として見ているので、より意味をなさない」と私は思いました。しかし私はあなたの論理も理解しています。 –

関連する問題