如何在一年的变化中平均分配周数



查询在更改年份之前可以正常生成周。正如您在生成的输出(如下图所示)中看到的那样,在年份变化期间,我得到了不同的模式。请帮助。我想平分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
)

最新更新