2017-11-17 1 views
0

어쨌든 잘못된 고객 ID를 받고 있습니다. 첫 번째 주문일 이후 적어도 매년 한 번 이상 주문한 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, very bad !! –

+1

비평 외에도 도움이되는 정보를 주실 수 있습니다 – Regan

답변

2

당신은 내가 당신을 가지고 한 Customer ID을 요구하고 AS 실내 질문 당신이 찾고있는 것의 예. 난 단지 그 가정 o_c_id을 선택 해요로 쿼리를 변경할 자유롭게하는 것은 이것은 당신에게 그들의 첫 번째 순서 이후 주문 매년를 배치 한 모든 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()) 

입니다.

+0

어쩌면 제가 잘못 묻는 질문을 던지기도했지만 미안하지만 첫 번째 순서는 그 첫 번째 순서를 의미합니다. 하나의 특정 고객이 내가 일반적으로 의미하는 것 – Regan

+1

@Regan : 'MIN (YEAR (o_date))'를 ((FROM 주문 o_all) (SELECT MIN (Y_all.o_date)) '로 대체하십시오. –

+0

내가 찾고 있었던 것이 토스 튼 덕분에 – Regan