특정 시간내에 발생한 3개 이상의 이벤트를 찾는 방법 0 2 143

by ekujb [SQL Query] [2020.09.15 15:38:32]


안녕하세요.

예를들어

CUSTOMER_ID int, // 고객 ID
PRICE int, // 가격
PAYMENT_DATE datetime // 비용 지불 일시

위와 같이 고객ID, 가격, 지불일 테이블이 있을때

동일 고객(CUSTOMER_ID)이 5분이내에 3개 이상의 비용지불 이벤트가 발생한 데이터를 뽑는 SQL은 어떻게 만들면 될까요?

고수님들의 도움 부탁드립니다.

by ekujb [2020.09.15 15:39:44]

참고로 MySQL 입니다.


by 마농 [2020.09.15 16:23:38]
WITH t AS
(
SELECT 111 customer_id, 111 price, '2020-09-15 15:10.10' payment_date
UNION ALL SELECT 111, 111, '2020-09-15 15:12.10'
UNION ALL SELECT 111, 111, '2020-09-15 15:14.10'
UNION ALL SELECT 222, 222, '2020-09-15 15:10.10'
UNION ALL SELECT 222, 222, '2020-09-15 15:20.10'
UNION ALL SELECT 222, 222, '2020-09-15 15:21.10'
UNION ALL SELECT 222, 222, '2020-09-15 15:27.10'
UNION ALL SELECT 333, 333, '2020-09-15 15:20.10'
UNION ALL SELECT 333, 333, '2020-09-15 15:21.10'
UNION ALL SELECT 333, 333, '2020-09-15 15:22.10'
UNION ALL SELECT 333, 333, '2020-09-15 15:23.10'
UNION ALL SELECT 333, 333, '2020-09-15 15:24.10'
)
SELECT a.customer_id, a.price, a.payment_date
     , COUNT(*) cnt
  FROM t a
 INNER JOIN t b
    ON b.customer_id   = a.customer_id
   AND b.payment_date >= a.payment_date
   AND b.payment_date <= DATE_ADD(a.payment_date, INTERVAL 5 MINUTE)
 GROUP BY a.customer_id, a.price, a.payment_date
HAVING COUNT(*) >= 3
;

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입