将最后X周数字插入临时表

时间:2013-09-18 10:21:36

标签: sql sql-server date stored-procedures temp-tables

我的问题

我正在尝试编写一个存储过程来检索过去X周的周数,然后将它们插入到临时表中。

到目前为止,我已经能够创建临时表并返回内容(不是很难)。但是,我的问题现在在于将最后X周的数字插入我的临时表中...我是否使用某种循环?如果是这样,我该怎么做?

请注意我不能对当前周数进行简单的减号,因为如果当前周数小于X,则可能产生负数...周数必须用{{1每次(我想)。

我尝试了什么......

到目前为止我的代码看起来像这样:

DATEPART

1 个答案:

答案 0 :(得分:1)

这样的事情?

declare @X int = 3

;with cte as (
     select 0 as num       
     union all
     select num + 1 from cte where num < @X - 1
)
select
    datepart(wk, dateadd(wk, -num, getdate()))
from cte

<强> sql fiddle demo

查询由两部分组成。第1部分是recursive common table expression。基本上我需要的是建立一个从0到@X - 1的数字表,如下所示:

 num
 0
 1
 2

之后,我需要计算日期,如当前日期,当前日期 - 1周,当前日期 - 2周 - 所以我使用dateadd()函数(注意减去num之前,我想减去几周)。现在我只需按datepart()函数计算周数。