将一周第一天的日期添加到日期维度

Add date of first day of week to date dimension

我想在我的日期维度中添加一列,其中包含该周第一天的日期。这是它的一部分

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 都会有第一个 dayOfWeekNumber (dayOfWeekNumber =1)

CalendarDate

看起来像

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(伪代码,我知道这不是我真正想要的)。

感谢您的建议。很确定我需要 window 周数。

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