양력날짜 | 음력날짜 | 요일 | 휴일며칠전인지 | 휴일며칠후인지 |
19000129 | 18991229 | 월요일 | 2 | 1 |
19000130 | 18991230 | 화요일 | 1 | 2 |
19000131 | 19000101 | 수요일 | 3 | 3 |
19000201 | 19000102 | 목요일 | 2 | 1 |
.. | .. | .. | .. | .. |
.. | .. | .. | .. | .. |
.. | .. | .. | .. | .. |
.. | .. | .. | .. | .. |
.. | .. | .. | .. | .. |
안녕하세요. 날짜 테이블에 컬럼을 추가하던 중에 어려운 점이 생겨서 질문 드립니다
빨간색으로 칠한 컬럼을 추가하고 싶은데요,
( 음력날짜가 1월 1일이면 설날이라 휴일로 취급하여 양력날짜로 19000130은 휴일 1일전 으로 됩니다 )
다음 휴일로부터 며칠 전인지와, 이전 휴일로부터 며칠 후 인지를 저장하고 싶습니다.
여기서 휴일은 토요일과 일요일, 음력 날짜로 설날과 추석 입니다.
휴일 테이블은 따로 있고 휴일이면 Y, 아니면 N 이 저장되어있습니다.
여기서 휴일 테이블을 참고하여 휴일 며칠 전인지 며칠 후인지를 계산하고 싶은데 찾아보니 LAG 와 LEAD 함수를 사용해야 할 것 같은데요,
단순히 한번, 두번 이전의 데이터를 참고하는 것이 아니라 다음 휴일이 Y인 곳 까지의 count와, 이전 휴일이 Y인 곳 까지의 count를 관리하여
저장하여야 할 것 같은데, 이 방법을 모르겠습니다...
많은 도움 부탁드립니다 ㅠㅠ
-- 오늘따라 바빠서 일단 휴가 몇일전인지 WITH CALENDAR (SUN_DT,MOON_DT) AS ( SELECT '19000129' , '18991229' FROM DUAL UNION ALL SELECT '19000130' , '18991230' FROM DUAL UNION ALL SELECT '19000131' , '19000101' FROM DUAL UNION ALL SELECT '19000201' , '19000102' FROM DUAL UNION ALL SELECT '19000202' , '19000103' FROM DUAL UNION ALL SELECT '19000203' , '19000105' FROM DUAL UNION ALL SELECT '19000204' , '19000106' FROM DUAL ) , HOLIDAY ( SUN_DT , HOLIDAY_YN ) AS ( SELECT '19000131' , 'Y' FROM DUAL ) SELECT SUN_DT , MOON_DT , DY , COUNT(*) OVER(PARTITION BY GB ORDER BY SUN_DT DESC ) BF_HOLIDAY_CNT FROM (SELECT A.SUN_DT , A.MOON_DT , TO_CHAR(TO_DATE(A.SUN_DT,'YYYYMMDD'),'DAY') DY , SUM(1+CASE WHEN TO_CHAR(TO_DATE(A.SUN_DT,'YYYYMMDD'),'D') IN ( 1 , 7 ) THEN 1 WHEN B.HOLIDAY_YN = 'Y' THEN 1 END ) OVER(ORDER BY A.SUN_DT) GB , ROW_NUMBER() OVER(ORDER BY A.SUN_DT) RN FROM CALENDAR A , HOLIDAY B WHERE A.SUN_DT = B.SUN_DT(+) ) ORDER BY SUN_DT