주차관련 질문 0 6 3,335

by 손님 [SQL Query] 주차 NEXT_DAY [2012.03.16 15:19:08]


안녕하세요 주차에 대해 많이 찾아봤지만 언제나 기준이 달라서 힘드네요 ;;;

iso 국제기준 주차인 'iw'를 사용하지 못하게 되어 질문드립니다.

예를 들어 설명드리면...

2008년 12월 29일이 월요일이고 만약 52주차라면..
그 뒤로 7일은 다 52주차가 되어야 합니다. (2009년1월 4일까지)
2009년 1월 5일부터 1주차!!!

2009년 12월 28일이 월요일이고 만약 52주차라면...
그 뒤로 7일은 다 52주차가 되어야 합니다 (2010년 1월 3일까지)
2010년 1월 4일부터 1주차!!

'iw'기준은 목요일이 포함된 주가 1주차가 되므로
위 조건에 만족하지 못하게 되더라구요 ㅜㅜ

많은 도움 부탁드립니다~
by 송민구 [2012.03.16 15:21:49]
윽...제가 로그인하지 않고 글을 남겼었군요..
추가로...같은 주차에 대해서 월이 바뀌게 되면 A,B로 나눠져야 합니다.
예) 2008년 12월 29일 ~ 31일 은 W52A / 2009년 1월 1일 ~ 4일은 W52B 로 구분되어야 합니다 ㅜㅜ

by 마농 [2012.03.16 16:09:27]
WITH t AS
(
SELECT TO_DATE('200812', 'yyyymm') + LEVEL - 1 dt
  FROM dual
 CONNECT BY LEVEL <= 100
)
SELECT dt
     , TO_CHAR(TRUNC(dt, 'iw'), 'yyyy') y
     , 'W' || LPAD(
       ( TRUNC(dt, 'iw')
       - NEXT_DAY(TRUNC(TRUNC(dt, 'iw'), 'yy') - 1, 2)
       ) / 7 + 1, 2, '0')
     || CASE WHEN TO_CHAR(TRUNC(dt, 'iw'), 'mm') != TO_CHAR(TRUNC(dt, 'iw') + 6, 'mm')
             THEN DECODE(TO_CHAR(TRUNC(dt, 'iw'), 'mm'), TO_CHAR(dt, 'mm'), 'A', 'B')
         END w
 FROM t
;

by 송민구 [2012.03.16 16:41:32]
와..마농님 못따라가겠네요 후~ ㅎㅎ
정말 감사합니다 

by 손님 [2012.03.16 17:12:51]

iw 사용 안한겁니다.
SELECT  YMD,
    'W'||
    WW||
    CASE WHEN COUNT(DISTINCT YYYY) OVER (PARTITION BY WW) > 1 THEN
CASE WHEN TO_CHAR(YMD,'WW') >= WW THEN 'A' ELSE 'B' END
    END WW
FROM (
SELECT  YMD,
    TO_CHAR(YMD,'YYYY') YYYY,
    FIRST_VALUE(TO_CHAR(YMD-1,'WW')) OVER (PARTITION BY ROWNUM - TO_CHAR(YMD-1,'D') ORDER BY YMD) WW
FROM TEST1
)
ORDER BY YMD

by 송민구 [2012.03.16 18:20:33]
오..위분꺼는 좀 어렵네요 ㅎ 그래도 감사합니다 
공부한번 해보겠습니다^^

by 손님 [2012.03.18 23:16:17]
다시 읽어보니 월도별로 A B로 구분하는거네요..
바로위에 있는건 년도별로 A B로 구분하는겁니다. YYYY인걸 YYYYMM으로 바꾸면 되긴하겠네요.
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입