添加星期日的第一天的日期

时间:2016-02-19 04:16:45

标签: sql sql-server data-warehouse

我想在我的日期维度中添加一列,其中包含该周第一天的日期。这是一个看起来像什么

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 = 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(伪代码,我知道这不是字面意思,我想要它做什么)。

感谢您的建议。我很确定我需要在周数上显示窗口。

1 个答案:

答案 0 :(得分:1)

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