쿼리 문의 드립니다 0 3 981

by 날자~! [2019.01.09 15:55:46]


당일 기준,

1년 전 동일 주차의 같은 요일의 일자를
을 구하고 싶은데 도움 부탁드립니다.

예로,
당일이 올해 53주차 화요일이면
작년 53주차의 화요일의 일자를 구하고 싶습니다.

 

만약 작년기준 53주차가 없다면

52주차 화요일 일자를 구하고 싶습니다

 

by 마농 [2019.01.09 16:45:43]

IW 주차 기준으로 작성했습니다.
 - 일주일 : 월화수(목)금토일
 - 일주일의 중앙인 목요일 기준 연도를 따름.

WITH t AS
(
SELECT TO_DATE('20201224', 'yyyymmdd') + LEVEL dt
  FROM dual
 CONNECT BY LEVEL <= 20
)
SELECT dt
     , iyyy_iw_dy
     , DECODE(TO_CHAR(x, 'iw'), iw, x, x - 7) x_dt
     , TO_CHAR(DECODE(TO_CHAR(x, 'iw'), iw, x, x - 7), 'iyyy-iw-dy') x_iyyy_iw_dy
  FROM (SELECT dt
             , TO_CHAR(dt, 'iyyy-iw-dy') iyyy_iw_dy
             , TO_CHAR(dt, 'iw') iw
             , TRUNC(TRUNC(dt, 'iyyy') - 1, 'iyyy')
             + (TO_CHAR(dt, 'iw') - 1) * 7
             + TO_CHAR(dt - 1, 'd') - 1
            AS x
          FROM t
        )
;

 


by 마농 [2019.01.09 17:03:56]

너무 어렵게 풀었네요.
쉽게 다시...

WITH t AS
(
SELECT TO_DATE('20201224', 'yyyymmdd') + LEVEL dt
  FROM dual
 CONNECT BY LEVEL <= 20
)
SELECT dt
     , TO_CHAR(dt, 'iyyy-iw-dy') iyyy_iw_dy
     , dt - w x_dt
     , TO_CHAR(dt - w, 'iyyy-iw-dy') x_iyyy_iw_dy
  FROM (SELECT dt
             , DECODE(TO_CHAR(dt, 'iw'), TO_CHAR(dt-52*7, 'iw'), 52, 53) * 7 w
          FROM t
        )
;

 


by 날자~! [2019.01.09 17:03:39]

답변 감사드립니다

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