오라클 영업일 계산 질문입니다 0 5 3,662

by 자이제시작이야 [Oracle 기초] [2018.08.03 12:24:23]


std_date(특정날짜) 파라미터 값을 기준으로 

가장 최근의 이전 영업일 5일치의 날짜를 가져오고 싶습니다

휴일정보 테이블은

날짜.             영업일 여부.             요일.   

20180803.          Y.                       5

20180804.           N.                     6

20180805.            N.                    7

20180806.            Y.                    1

20180807.            Y.                     2

이런 형태입니다

 

20180807 기준을 포함해서 이전 영업일인 날짜 5개를 가져오고 싶은데 도와주세요~

 

by 트집이 [2018.08.03 13:07:55]

허접 하지만 이런 방법도 있을거 같아요.

더 좋고 간결한 방법은 고수님들이... 

with A AS (
    select '20180807' businessDate, 'Y' openYn from dual
    UNION ALL
    select '20180806' businessDate, 'Y' openYn from dual
    UNION ALL
    select '20180805' businessDate, 'N' openYn from dual
    UNION ALL
    select '20180804' businessDate, 'N' openYn from dual
    UNION ALL
    select '20180803' businessDate, 'Y' openYn from dual
    UNION ALL
    select '20180802' businessDate, 'Y' openYn from dual
    UNION ALL
    select '20180801' businessDate, 'Y' openYn from dual
)
SELECT businessDate
FROM (
    select businessDate 
    from A
    where businessDate <= '20180807'
    and openYn = 'Y'
    order by businessDate desc
)
WHERE rownum <= 5;


by 자이제시작이야 [2018.08.03 16:17:14]

감사합니다~!


by 자이제시작이야 [2018.08.03 21:33:27]

근데 파라미터 값은 다른 테이블 A에서 가져오는데 

where businessDate <= '20180807'    이 부분에서

'20180807'에 A의 기준날짜 컬럼의 값이 들어가는데

적어놓으신 쿼리 밖에 있는 기준 컬럼을 안으로 못가져오네요..


by 마농 [2018.08.06 07:48:49]
SELECT *
  FROM (SELECT a.컬럼
             , a.std_date
             , b.businessDate
             , ROW_NUMBER() OVER(PARTITION BY a.PK ORDER BY b.businessDate DESC) rn
          FROM 기준테이블 a
             , 휴일정보 b
         WHERE b.businessDate <= a.std_date
           AND b.openYn = 'Y'
        ) c
 WHERE rn <= 5
;

 


by 자이제시작이야 [2018.08.07 10:13:04]

감사합니다 ~~ 마농님..~!

ROW_NUMBER() OVER 라는 것도 있군요..

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