안녕하세요.
주간 분석자료를 보여주는 모듈이 있는데요...
주간 집계 기준을 정하기 위해 매년 주간 시작날짜와 마지막 날짜에 대한 기준 테이블에 값을 넣어주고 있습니다.
작년까지는 달력보고 1주 ~ 마지막 53주까지 각 주별 시작 날짜와 종료 날짜에 대한 값을 엑셀에 수작업으로
넣고 이걸 테이블에 옮겼는데요...
너무 원시적인거 같아서 어느정도 자동 생성 할 수 있는 방법을 찾고 있습니다.
일단 규칙은 다음과 같습니다.
2014년 올해를 예로들어
2014-01-01 ~ 2014-01-04 (2014년, Week1, 1월)
2014-01-05 ~ 2014-01-11 (2014년, Week2, 1월)
2014-01-12 ~ 2014-01-18 (2014년, Week3, 1월)
2014-01-19 ~ 2014-01-25 (2014년, Week4, 1월)
2014-01-26 ~ 2014-01-31 (2014년, Week5, 1월) <-- (마지막주의 말일이 토요일이 아닌 경우 일단 끊음)
2014-02-01 ~ 2014-02-01 (2014년, Week5, 2월) <-- (1일 ~ 토요일까지 날짜 구하고 다섯째주 2월로 표기)
2014-02-02 ~ 2014-02-08 (2014년, Week6, 2월)
....
...
..
..
주간 날짜를 구하기 위해 한 주의 범위는 일요일 ~ 토요일 까지로 잡혀있습니다.
하지만 매월 1일과 말일이 각각 일요일, 토요일이 아닌 경우가 있습니다.
2014년 1월 1일은 수요일입니다.
따라서 2014년의 첫째주는 수요일 ~ 토요일 까지 입니다.
그런데 1월 ~ 2월로 넘어갈 때는 위 예로 든 경우처럼 5째주가 두번 나올 수 있습니다. (각각 1월, 2월로 분리하여)
일단 위처럼 매월 말일과 시작일 기준으로 끊어서 각각 날짜 범위를 구하지 않더라도
일단 주별로 시작 날짜와 마지막 날짜만이라도 자동으로 구할 수 있으면 일일이 달력보고 타이핑하는 것 보다는 쉬울것 같아서
어느정도 자동화 할 수 있는 방법을 찾고 있습니다.
도움 부탁드립니다.
as (
select right('0'+convert(varchar(2) ,number + 1),2) mm
from master.dbo.spt_values
where type = 'P'
and number < 12 ) ,
T_dd
as (
select right('0'+convert(varchar(2) ,number + 1),2) dd
from master.dbo.spt_values
where type = 'P'
and number < 31 ) ,
resultT
as (
select '2014' yy
, '2014'+a.mm +b.dd yymmdd
, a.mm mm
, '2014'+a.mm yymm
, DATEPART(wk,'2014'+a.mm +b.dd ) wk
from T_mm a cross join t_dd b
where ISDATE('2014'+a.mm +b.dd ) = 1 )
select MIN(yymmdd) + '~' + MAX(yymmdd) + ' ('+ yy +'년'+', Week'+cast(wk as varchar) +','+mm+'월)'
from resultT
group by yy,yymm , wk ,mm
order by yymm , wk