我正在尝试按周汇总数据。我的示例查询看起来像
SET DATEFIRST 1
Select ID,
DATENAME(week, p.SellingDate) as SellingWeek,
DATENAME(year, p.SellingDate) as SellingYear,
SUM(Quantity),
SUM(Revenue)
From dbo.Sales
Where
p.SellingDate >=’2015-12-20’ and P.SellingDate < ’2016-02-27’
Group by ID,
DATENAME(week, p.SellingDate),
DATENAME(year, p.SellingDate)
当我尝试执行此操作时,我遇到了一个问题:
该查询返回正确的数据,但问题出现在2015年的最后一周。它仅将2015年的一部分(12/28至12/31)视为第53周,并将其余部分(从01/01至01/03)作为2016年的新一周。我只有一行包含整个星期的数据,即12/28至01/03),但SQL Server返回了2行。有解决方法吗?
最佳答案
我认为您想创建一个用于在周开始和周结束进行分组的构造,然后使用该构造对您的聚合子句进行分组。
SET DATEFIRST 1
Select DATEADD(dd, -(DATEPART(dw, p.SellingDate)-1), p.SellingDate) AS [WeekStart],
DATEADD(dd, 7-(DATEPART(dw, p.SellingDate)), p.SellingDate) AS [WeekEnd],
SUM(Quantity),
SUM(Revenue)
From dbo.Sales
Where
p.SellingDate >= '2015-12-20' and P.SellingDate < '2016-02-27'
Group by ID,
DATEADD(dd, -(DATEPART(dw, p.SellingDate)-1), p.SellingDate),
DATEADD(dd, 7-(DATEPART(dw, p.SellingDate)), p.SellingDate)
关于sql - 连续几年按周分组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40367549/