当第一个日期等于周日时,如何使用datediff将周一到周日分组



认识到这是一个常见的问题,已经回答了很多次,我还没有找到解决我的查询的方法。

我的SQLServer@@DateFirst=7(星期日(,我正在尝试按星期对发票[日期]的一段时间进行分组,从星期一到星期日。

查询工作正常,但星期日日期被分组到下面的星期一组中。我理解为什么会这样,但找不到解决方案。我不能创建函数,所以这些方法也没有帮助。

SELECT
DATEADD(WEEK, DATEDIFF(WEEK,0, [DATE]), 0) AS 'DATE GROUP'
,[BRANCH]
,[SUNDTYPE]
,COUNT([INV_NUM]) AS 'Number of Sundrys'
,SUM([COST]) AS 'Sundry Rev'
FROM Invoice_Table
WHERE [DATE] BETWEEN '2022-03-07 00:00:00.000' AND '2022-03-13 00:00:00.000'

GROUP BY DATEADD(WEEK, DATEDIFF(WEEK,0, [DATE]), 0), SUNDTYPE, BRANCH

SQL Server是2012

DATEADD和DATEDIFF将所有日期分组到每周的星期一,期望星期一到星期日日期全部分组在一起

您应该能够通过将有问题的日期向后移动一天来伪造它。这样,你要找的是

Mon Tue Wed Thu Fri Sat Sun

但是WEEK功能是基于的

Sun Mon Tue Wed Thu Fri Sat

因此,例如,如果你基于本周的数据是

Date IS    What you ARE getting   What you want
Fri Apr 1    Week X               Week X
Sat Apr 2    Week X               Week X
Sun Apr 3    Week Y               Week X 
Mon Apr 4    Week Y               Week Y
Tue Apr 5    Week Y               Week Y

只需从根据周函数((检查的有问题的日期中减去1天,因此将所有日期向后滚动1会使星期一看起来像星期天,这是您的正确断点,而星期天则会回滚到前一周的星期六。

DATEADD(WEEK, DATEDIFF(WEEK,0, dateadd( day, -1, [Date])), 0) AS 'DATE GROUP'

然后,您只需将日期重新添加回1天,即可重新校准为周一,以便于显示。

相关内容

  • 没有找到相关文章

最新更新