如何按周对日期字段进行分组,周数从星期六开始?

Bra*_*ore 13 sql sql-server

当我看到答案时,我知道我会去'呃',但是:

如何按周对日期字段进行分组,周数从星期六开始?

小智 22

您需要先使用DATEFIRST设置Saturday为一周的第一天.值1表示星期一,值6表示星期六.然后你可以使用DATEPARTweekwkww将你的日期列的值.

您可以在下面的示例数据中看到日期的值,2012-01-072012-01-08在weekno 2下分组,因为2012-01-07星期六.任何一年的1月1日总是一年中的第一周.

单击此处查看SQL Fiddle中的输出.

脚本:

CREATE TABLE weekdays
(
    datevalue    datetime NOT NULL
  , numericvalue INT      NOT NULL
);

INSERT INTO weekdays (datevalue, numericvalue) VALUES
  ('2012-01-01', 4),
  ('2012-01-02', 1),
  ('2012-01-07', 2),
  ('2012-01-08', 8),
  ('2012-01-14', 3),
  ('2012-01-15', 2),
  ('2012-01-19', 6);

SET DATEFIRST 6;

SELECT      DATEPART(wk, datevalue)     weekno
        ,   SUM(numericvalue)           totalvalue
FROM        weekdays
GROUP BY    DATEPART(wk, datevalue)
Run Code Online (Sandbox Code Playgroud)

输出:

weekno totalvalue
------ ----------
  1        5
  2       10
  3       11
Run Code Online (Sandbox Code Playgroud)