[SQL]구매 주기 구하기

hy_jin·2023년 11월 20일

첫 구매와 최근 구매주기에 대한 컬럼이 없는 상황에서 재구매 주기를 SQL 커리를 통해 계산해보았다.

보통의 구매주기는 최근 구매 - 첫 구매를 통해 계산을 많이하는 것을 보았는데 이런 경우
중간의 구매들에 대해 계산되지 않아 구매 주기를 계산하는데 적합한가라는 생각이 들었다.

테이블에서 customer_id, order_date 열을 통해 계산했다.

  1. group by,oder by 절을 통해 customer_id, order_date 묶어준다.
  2. 다음은 CASE WHEN문 과 LEAD 함수를 이용해 customer id가 다음 행과 일치할 경우만 계산을 진행하게 한다
  3. 구매 주기 계산은 DATEDIFF함수와 LEAD 함수를 통해 값을 읽어온다.

결과

여기서 null값을 제거해준다.
case when에서 else값을 반환하지 않는 방법이 있으면 더 깔끔했을텐데 다음에 더 알아봐야겠다.

코드

select customer_id
	,lead(customer_id) over (ORDER BY customer_id, order_date) as next
    ,order_date
    ,CASE WHEN customer_id = lead(customer_id) over (ORDER BY customer_id, order_date) THEN datediff(lead(order_date) over (ORDER BY customer_id, order_date) , order_date) ELSE null END as re

from superstore
where order_date BETWEEN '2018-01-01%' AND '2018-12-31' 
group by customer_id, order_date
order by customer_id, order_date
profile
천천히 꾸준히

0개의 댓글