每周组不包括星期日

时间:2017-11-14 12:54:53

标签: sql sql-server tsql

我在以下查询中按周对数据进行分组

 select id,sum(quantity) ,dateadd(wk, datediff(wk,0, [createddate]), 0) from table1 where    
 createddate >= '2017-10-02' and createddate <= '2017-11-12'  
 and [id] = 111      
 group by [id] , dateadd(wk, datediff(wk,0, [createddate]), 0) 

它将数据分组到周六,即周一至周六,而不是周一至周日。有人可以解释我错过的东西。

我无法更改数据库开始日

示例数据是:

  • 02/10/2017 9.00
  • 03/10/2017 10.50
  • 04/10/2017 10.00
  • 08/10/2017 1.00

2 个答案:

答案 0 :(得分:0)

您可以按周编号分组:

 group by [id] , datepart(ISO_WEEK, [createddate])

ISO周从星期一开始。

答案 1 :(得分:0)

一周的第一天基于您的语言设置(默认值为us_english为7(星期日))。 SET DATEFIRST DATEDIFF

无效

您可以尝试此查询

set DATEFIRST 1

select id,sum(quantity) ,dateadd(wk, datediff(wk,0, [createddate]), 0) from table1 where    
createddate >= '2017-10-02' and createddate <= '2017-11-12'  
and [id] = 111
group by [id] , dateadd(dd,(-1)*(datepart(dw,[createddate])-1),[createddate])

set DATEFIRST 7 

<强>更新

dateadd(dd,(-1)*(datepart(dw,[createddate])-1),[createddate])

它会将本周一作为原始查询返回。