2016-02-19 17 views
2

Я хочу добавить столбец в мое измерение даты, которое содержит дату первого дня этой недели. вот часть того, что он выглядит какДобавить дату первого дня недели до даты измерение

CalendarDate DayOfWeekNumber DayKey DayOfWeekName WeekNumber 
1996-01-01  2  19960101  MONDAY   1 
    1996-01-02 3 19960102 TUESDAY    1 
    1996-01-03 4 19960103 WEDNESDAY   1 
    1996-01-04 5 19960104 THURSDAY   1 
    1996-01-05 6 19960105 FRIDAY    1 
    1996-01-06 7 19960106 SATURDAY   1 
    1996-01-07 1 19960107 SUNDAY    1 
    1996-01-08 2 19960108 MONDAY    2 
    1996-01-09 3 19960109 TUESDAY   2 
    1996-01-10 4 19960110 WEDNESDAY   2 
    1996-01-11 5 19960111 THURSDAY   2 
    1996-01-12 6 19960112 FRIDAY    2 
    1996-01-13 7 19960113 SATURDAY   2 
    1996-01-14 1 19960114 SUNDAY    2 

Так в основном я хотел бы столбец WeekStartDate, что для каждого WeekNumber будет иметь CalendarDate первого dayOfWeekNumber (dayOfWeekNumber = 1)

Это будет выглядеть

CalendarDate DayOfWeekNumber DayKey DayOfWeekName WeekNumber WeekStart 
1996-01-01  2  19960101  MONDAY   1    1996-01-01 
    1996-01-02 3 19960102 TUESDAY    1    1996-01-01 
    1996-01-03 4 19960103 WEDNESDAY   1    1996-01-01 
    1996-01-04 5 19960104 THURSDAY   1    " 
    1996-01-05 6 19960105 FRIDAY    1    " 
    1996-01-06 7 19960106 SATURDAY   1    " 
    1996-01-07 1 19960107 SUNDAY    1    " 
    1996-01-08 2 19960108 MONDAY    2    1996-01-08 
    1996-01-09 3 19960109 TUESDAY   2    " 
    1996-01-10 4 19960110 WEDNESDAY   2    " 
    1996-01-11 5 19960111 THURSDAY   2    " 
    1996-01-12 6 19960112 FRIDAY    2 
    1996-01-13 7 19960113 SATURDAY   2 
    1996-01-14 1 19960114 SUNDAY    2 

так что-то вроде

update myTable set WeekStartDate = CalendarDate where dayofweeknumber=2 (monday) for each weeknumber (позер ocode, я знаю, что это не то, что буквально то, что я хочу сделать).

Спасибо за предложения. Довольно уверен, что мне нужно окном на weeknumber.

ответ

1
UPDATE C 
SET  WeekStartDate = week_start 
FROM 
(
    select *, week_start = min(CalendarDate) 
          over (partition by year(CalendarDate), WeekNumber) 
    from Calendar 
) AS C