运行周数据52周滚动

时间:2017-09-01 19:32:26

标签: sql tsql

有人可以建议我如何考虑星期日开始周和周六结束,同时在52周的滚动报告中将它们倒数,例如第1周,第2周......第52周

我想把我当前的周作为周日从周日开始,所以即使它的部分周仍然是第1周和上周的周日 - 周六是第2周,依此类推,直到去年的第52周(大致在9月倒计时) )。我需要这个,因为我正在处理每日报告,它将查找本周和过去51周(整周)的销售情况。我的报告也应该返回任何一周没有销售'0'而不跳过它。

1 个答案:

答案 0 :(得分:2)

这是一种方式。注意我创建了递归CTE来填充一些日期。你不必做这一步,真正只需要YourWeekOrder = ...部分。

declare @startDate date = dateadd(year,-1,getdate()) 
declare @endDate date = getdate()

;with cte as(
    select @startDate as TheDate
    union all
    select dateadd(day,1,TheDate)
    from cte
    where TheDate < @endDate)

select
    TheDate
    ,TheWeekOfYear = datepart(week,TheDate)
    ,YourWeekOrder = dense_rank() over (order by cast(datepart(year,TheDate) as char(4)) + case when len(datepart(week,TheDate)) = 1 then '0' + cast(datepart(week,TheDate) as char(2)) else cast(datepart(week,TheDate) as char(2)) end desc)
from cte 
order by
    TheDate
option(maxrecursion 0)

<强> SEE IT IN ACTION HERE