Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

닌자고양이

[SQL] 그룹 관계 없이 값의 연속성에 의한 Partitioning 본문

기타 코드

[SQL] 그룹 관계 없이 값의 연속성에 의한 Partitioning

닌자고양이 2020. 2. 7. 15:11
DAYS	HOLYDAY_YN	HOLYDAY_STR
2017-01-01	1	1
2017-01-02	0	0
2017-01-03	0	0
2017-01-22	1	1
2017-01-23	1	2
2017-01-24	0	0
2017-01-25	0	0
2017-01-26	0	0
2017-01-27	1	1
2017-01-28	1	2
2017-01-29	1	3
2017-01-30	1	4

1은 휴일, 0은 평일을 뜻하는데, 당일이 몇일 연속 휴일인지 알아내는 문제이다.

 

0 과 1 두가지 만으로 구성된 데이터를 연속성만으로 증분 그룹핑하기가 의외로 까다롭다.

SELECT DAYS, HOLYDAY_YN, HOLYDAY_YN * RANK() OVER (PARTITION BY d ORDER BY DAYS) HOLYDAY_STR
FROM
(
	SELECT *, MAX(CASE WHEN prev = 0 THEN DAYS END) OVER (ORDER BY DAYS) d
	FROM 
	(SELECT *, LAG(HOLYDAY_YN) OVER(ORDER BY DAYS) prev
		FROM DATELIST
	)A
)A

 

'기타 코드' 카테고리의 다른 글

[SQL] WITH 절 (CTE: Common Table Expressions)  (0) 2021.03.07
[SQL] PIVOT 과 UNPIVOT  (0) 2020.02.12
[SQL] STRING_AGG 대용  (0) 2020.02.08
[SQL] N개 행 생성하기  (0) 2020.02.07
Comments