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

クエリは 2 つの部分で構成されます。パート 1 は、再帰的な共通テーブル式です。基本的にここで必要なのは、次のように 0 から @X - 1 までの数値のテーブルを作成することです。

 num
 0
 1
 2

その後、現在の日付、現在の日付 - 1 週間、現在の日付 - 2 週間などの日付を計算する必要があるため、dateadd()関数を使用します (num の前にマイナスに注意してください。週を減算します)。そして今、datepart()関数で週番号を計算する必要があります。

于 2013-09-18T10:28:07.377 に答える