안녕하세요 궁금한게 있어서 질문을 드립니다.
다음과 같이 테이블의 정보가 있을때, 각 회원의 구매주기를 구하려고 합니다.
회원별 구매횟수를 count 해야하는데 제외 조건이 있습니다.
user_id | pur_date |
aaa | 2019-01-01 |
aaa | 2019-01-05 |
aaa | 2019-05-25 |
bbb | 2019-05-26 |
bbb | 2019-05-27 |
ccc | 2019-06-29 |
ccc | 2019-08-22 |
ddd | 2019-07-11 |
제외 조건 : 구매 횟수가 1회인 회원 제외, 구매주기가 1일 이내인 경우 제외
결과는 아래 표와 같이 나와야합니다.
user_id | pur_cnt |
aaa | 3 |
ccc | 2 |
어떻게 쿼리를 작성해야할까요??
WITH t AS ( SELECT 'aaa' user_id, '2019-01-01' pur_date FROM dual UNION ALL SELECT 'aaa', '2019-01-05' FROM dual UNION ALL SELECT 'aaa', '2019-05-25' FROM dual UNION ALL SELECT 'bbb', '2019-05-26' FROM dual UNION ALL SELECT 'bbb', '2019-05-27' FROM dual UNION ALL SELECT 'ccc', '2019-06-29' FROM dual UNION ALL SELECT 'ccc', '2019-08-22' FROM dual UNION ALL SELECT 'ddd', '2019-07-11' FROM dual ) SELECT a.user_id , COUNT(*) pur_cnt FROM t a , t b WHERE b.user_id (+) = a.user_id AND b.pur_date(+) = TO_CHAR(TO_DATE(a.pur_date, 'yyyy-mm-dd') - 1, 'yyyy-mm-dd') AND b.pur_date IS NULL -- 1일 이내 구매 제외 GROUP BY a.user_id HAVING COUNT(*) > 1 -- 1건 구매 제외 ;