with a as ( select '20160920' 날짜, 1 휴일구분 from dual union all select '20160921' 날짜, 1 휴일구분 from dual union all select '20160922' 날짜, 1 휴일구분 from dual union all select '20160923' 날짜, 1 휴일구분 from dual union all select '20160924' 날짜, 2 휴일구분 from dual union all select '20160925' 날짜, 2 휴일구분 from dual union all select '20160926' 날짜, 1 휴일구분 from dual union all select '20160927' 날짜, 1 휴일구분 from dual union all select '20160928' 날짜, 1 휴일구분 from dual union all select '20160929' 날짜, 1 휴일구분 from dual union all select '20160930' 날짜, 1 휴일구분 from dual union all select '20160931' 날짜, 1 휴일구분 from dual ) SELECT 날짜 FROM ( select 날짜 , DENSE_RANK() OVER (ORDER BY 날짜) RN from a WHERE 휴일구분 = 1 AND 날짜 > '20160921' ) --to_char(sysdate, 'yyyymmdd') WHERE RN = 5;
이러면 되지 않을까요?? 휴일 구분이 1 이고 입력한 날짜보다 큰 애들 중에 5등인 애를 뽑으면 될거 같단 생각을 해서요..
WITH TMP AS (
SELECT '20160920' AS DT, '1' AS GB FROM DUAL
UNION ALL SELECT '20160921' AS DT, '1' AS GB FROM DUAL
UNION ALL SELECT '20160922' AS DT, '1' AS GB FROM DUAL
UNION ALL SELECT '20160923' AS DT, '1' AS GB FROM DUAL
UNION ALL SELECT '20160924' AS DT, '2' AS GB FROM DUAL
UNION ALL SELECT '20160925' AS DT, '2' AS GB FROM DUAL
UNION ALL SELECT '20160926' AS DT, '1' AS GB FROM DUAL
UNION ALL SELECT '20160927' AS DT, '1' AS GB FROM DUAL
UNION ALL SELECT '20160928' AS DT, '1' AS GB FROM DUAL
UNION ALL SELECT '20160929' AS DT, '1' AS GB FROM DUAL
)
SELECT *
FROM (
SELECT T.*
, LEAD(DT, 5) OVER(ORDER BY DT) AS DT5
FROM TMP T
WHERE GB = '1'
) WHERE DT = '20160921'