반응형

주문번호, 주문일자, 주문자이메일이 있는 orders 테이블에서 이후 주문내역이 있으면

몇일만에 구입한 것인지 일수 계산이 하고 싶었다

 

처음엔 일수를 컬럼으로 저장해야하나? 싶었는데 MySQL LEAD 함수를 사용하니 민망할정도로 간단하게 구할수 있었다

 

ord_no distinct 처리를 한것은 orders 테이블 PK가 다른 키여서 중복값이 있기 때문

1회만 구입한 경우는 계산할 필요가 없기 때문에 LEAD 함수로 불러온 값이 null이 아닌경우만 출력했다

SELECT ord_no, ord_date, ord_next, DATEDIFF(ord_next, ord_date) AS date_diff, ord_email
FROM (
	SELECT ord_no, ord_date, LEAD(ord_date, 1) OVER(partition by ord_email order by ord_date) ord_next, ord_email
	FROM (
		SELECT distinct ord_no, ord_date, ord_email
	FROM orders) A) B
WHERE ord_next is not null;

 

새로운 함수 알아갈 때마다 신기하고 재밌음!

 

참고자료

https://it-mi.tistory.com/56

 

MySQL | LEAD, LAG 윈도우 함수

1. MySQL LEAD Function LEAD()함수는 현재 행에서 여러 행을 보고 해당 행의 데이터에 액세스 할 수 있는 윈도우 함수입니다. LAG()함수와 비슷하며, LEAD()기능은 현재 행과 동일한 결과 집합 내의 후속 행

it-mi.tistory.com

 

반응형

+ Recent posts