공휴일을 제외한 일자 구하기 쿼리질문 0 2 2,752

by 김귀염 [2014.10.15 09:30:34]


SELECT V_DATE FROM HOLIDAY;

-> 공휴일 데이터가 들어가있는 테이블

 2014년 9월 1일을 기준으로 7일이지난 날짜 (2014년 9월 8일)를 구하는 쿼리를 작성해야 되는데요

8,9,10은 공휴일 테이블에 존재하는 관계로 최종 결과값은 9월 11일이 나와야 합니다.

아무리 생각해도 방법을 모르겠네요 ㅠㅠ

by 날도 [2014.10.15 11:35:30]
SELECT MIN(DT) DT
FROM
(
    SELECT TO_DATE('20140901') + 7 + LEVEL -1 DT
    FROM DUAL
    CONNECT BY LEVEL < 100
) D
WHERE NOT EXISTS (SELECT 1 FROM HOLIDAY H WHERE H.V_DATE = D.DT)
;

연휴가 100일이 넘지 않는다는 전제가 필요하네요....100으로 해도 성능은 크게 문제 없어 보입니다.

 

 


by 백면서생 [2014.10.15 11:47:04]
-- 공휴일만 따로 관리하는 것 보다는 전체 날짜를 가지고 속성으로 평일,공휴일을 가지는
-- copy_ymd 테이블을 가져가시는게 효율적이라 생각됩니다.
-- 아래는 인위적으로 copy_ymd를 만들어서 해결한 방법입니다.
-- 재귀호출이나 모델절로도 가능하겠네요

with
t as
(
select to_char(to_date('20140901','yyyymmdd') + level ,'yyyymmdd') n_day
from dual
connect by level <= 365
)
,
h as
(
select '20140901' h_day from dual union all
select '20140902' h_day from dual union all
select '20140903' h_day from dual union all
select '20140908' h_day from dual union all
select '20140909' h_day from dual union all
select '20140910' h_day from dual 
)
select max(n_day)
from 
(
select n_day,nvl2(h_day,'H','A') status
from t,h
where t.n_day = h.h_day(+)
order by n_day
)
where status = 'A' and rownum <= 7 

 

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