2017-11-17 4 views
0

何とか間違った顧客IDを取得しています。最初の注文日から少なくとも1回は毎年注文したIDが必要です。毎年注文がある顧客のIDのみを選択してください

orders

o_id o_c_id o_type o_date 
1345 13  TA  2015-01-01 
7499 13  TA  2015-01-16 
7521 15  GA  2015-01-08 
7566 16  TA  2016-01-24 
7654 15  FB  2016-01-28 

customers

c_id c_name c_email 
13  Trump  [email protected]   
14  Obama  [email protected] 
15  Miguel [email protected] 
16  Dequavo [email protected] 

マイクエリ:

SELECT c_id, YEAR(o_date), c_email 
FROM orders 
WHERE YEAR(o_date) BETWEEN YEAR(MIN(o_date)) AND YEAR(CURDATE()) 
GROUP BY YEAR(o_date) 
HAVING COUNT(c_id) > 0 
ORDER BY c_id 
+0

提供されたデータでは、結果が正しく得られないことに気づきますか? (2017年に注文なし) –

+0

悪いグループBy、非常に悪い! –

+1

批判以外にも私に有益な情報を与えることができます – Regan

答えて

2

あなただけ私はあなたを持っているCustomer IDのために求めているAS屋内質問あなたが探しているものの例。私はそれだけでは、これはあなたに彼らの最初の注文以来、毎年順番に配置したすべてのo_c_idのリストを与える必要がありますCustomer ID

SELECT 
    o_c_id 
FROM 
    orders 
GROUP BY 
    o_c_id 
HAVING 
    (MIN(YEAR(o_date)) + COUNT(DISTINCT(YEAR(o_date))) -1) = YEAR(NOW()) 

であると仮定しo_c_idを選択していて、クエリを変更して自由に感じます。

+0

たぶん私は間違って申し訳ありませんが、私が一般的に意味している特定の顧客 – Regan

+1

@Regan:次に、MIN(YEAR(o_date))を '(SELECT MIN(YEAR(o_all.o_date)FROM orders o_all)'に置き換えます。 –

+0

おかげでトゥルステンは私が探していたものです – Regan

関連する問題