查询在更改年份之前可以正常生成周。正如您在生成的输出(如下图所示)中看到的那样,在年份变化期间,我得到了不同的模式。请帮助。我想平分7天。目前订单顺序是不相等的,你可以看到28/12/2014、01/01/2015和04/01/2015的输出顺序是错误的。同样,第一个差异不是7天,而是6天(从2014年9月4日到2014年11月9日)。我希望这是7天,即(从2014年9月3日到2014年11月9日)
您可以使用cte生成14周
无论起始日期如何,这将生成一个以7天为单位的周表,然后您可以使用该表对数据进行分类:
declare @startdate date
set @startdate = '2014-11-13'
;with cte (SOW,EOW,cnt)
as
(
select @startdate as SOW,dateadd(dd,6,@startdate) as EOW, 1 as cnt
union all
select dateadd(dd,7,SOW),dateadd(dd,7,EOW),cnt+1
from cte
where cnt<14
)
select * from cte
解决方案是使用。
GROUP BY
DATEDIFF(week, 0, ad.xDate)
Thanks to MatBailie for solution.
试试这样做。你希望你的一周从哪一天开始?
GROUP BY datediff(dd, ad.xDate, @MaxDate) / 7
编辑:我想我明白你想用AllDates
CTE做什么,但我不知道它是如何工作的。根据它所看到的,它似乎复制了@MinDate
的值,并提取了@MaxDate
之前的每个日期。我的期望是看到类似这样的东西,它应该能解决你加班的问题。我还猜测,你的14周块是重叠的,只有一天。
;WITH AllDates AS (
SELECT xDate FROM AllDates WHERE xDate > @MinDate AND xDate <= @MaxDate
)