1

我的问题

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

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

请注意,我不能简单地减去当前周数,因为如果当前周数小于 X,这可能会产生负数……必须DATEPART每次计算周数(我认为)。

我尝试过的...

到目前为止,我的代码如下所示:

-- Declare the variables for the login totals
DECLARE @Current_Week_Number int

-- Get the current week number
SELECT @Current_Week_Number = DATEPART( wk, GETDATE())

-- Create the temporary table
CREATE TABLE #Number_Of_Logins (
    Week_Number tinyint,
    Number_Of_Logins int
)

-- Return the number of logins
SELECT * FROM #Number_Of_Logins
4

1 回答 1

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 部分是递归公用表表达式。基本上我在这里需要的是建立一个从 0 到 @X - 1 的数字表,如下所示:

 num
 0
 1
 2

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

于 2013-09-18T10:28:07.377 回答