쿼리 질문드립니다. 0 6 726

by 짱구 [2016.09.29 10:38:21]


월력테이블안에

 

   날자          휴일구분

20160920          1

20160921          1

20160922          1

20160923          1

20160924          2

20160925          2

.........................

이런식으로 1은 평일 2는 휴일구분을 주고 월력테이블을 만들었습니다.

여기서 오늘이 20160921 이라면 휴일을 제외한 5일후 일자를 구하고 싶은데 어떻게 쿼리를 작성해야할지 모르겠습니다

도와주세요~~

 

by 도미노 같은 놈 [2016.09.29 11:01:31]
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등인 애를 뽑으면 될거 같단 생각을 해서요.. 


by 짱구 [2016.09.29 11:27:02]

감사합니다 바로 해결 되었네여^^


by Dev03 [2016.09.29 11:07:18]

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'


by 짱구 [2016.09.29 11:27:25]

답변해주셔서 감사합니다^^ 좋은하루되세여!


by 마농 [2016.09.29 11:24:35]

Dev03 님 방법은 전체범위 처리가 되어 버리겠네요.

도미노 같은 놈 님의 방법이 부분범위 처리가 가능합니다.

Dense_Rank 보다는 Row_number 가 의미상 맞겠네요.

어차피 날짜가 유일하므로 결과는 같겠지만.


by 짱구 [2016.09.29 11:27:54]

정확한 설명 감사합니다! 좋은하루되세요!

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입