SQL SERVER 2008 を使用して、特定の間隔でチェックポイントがカウントされるたびに行を返す関数を作成しようとしています。
言い換えれば、特定のオブジェクトが特定の間隔でアクティブだったことを示すテーブルが与えられた場合
[ID] [TIME FROM] [TIME TO]
23 12:34:00 13:14:00
結果セットとして、次のようなテーブルを取得しようとしていました。
[ID] [TimeCheck] [flag]
23 12:00:00 0
23 12:15:00 0
23 12:30:00 1
23 12:45:00 1
23 13:00:00 1
23 13:15:00 0
これを使用して、各 ID の間隔を提供するテーブルにリンクできます (下のfinalgoalを参照)
。その理由は、統計を計算してグラフを作成し、チェックした ID の数を数えたいからです。特定のチェックポイント時間のセットで。
カーソルを使用することもできましたが、それは非常に大まかなアプローチに聞こえるので、誰かがより良いものを提案してくれることを願っていました.
これは理想的な再帰問題に聞こえるので、CTEまたは再帰関数を考えていましたが、解決できませんでした
ご提案いただきありがとうございます。---- 編集 --- もちろん、次のような関数を使用できます。
CREATE FUNCTION test_GetTimePoints (@ID INT, @timeFrom TIME, @timeTo TIME ,@intervalMinutes INT)
RETURNS @result TABLE ( [ID] INT , LasTimeCheck TIME , flag BIT)
AS
BEGIN
DECLARE @curTick INT = DATEDIFF(MINUTE,'00:00:00',@timeFrom)/@intervalMinutes+1
DECLARE @endTick INT = DATEDIFF(MINUTE,'00:00:00',@timeTo)/@intervalMinutes
WHILE ( @curTick < = @endTick )
BEGIN
INSERT INTO @result
SELECT @ID, DATEADD(MINUTE,@curTick*@intervalMinutes,0),1
SET @curTick = @curTick + 1
END
RETURN
END
最終的な目標は、次のようなことです。
select ID,TS_In,TS_end, A.* FROM VEH M LEFT OUTER JOIN (SELECT * FROM
dbo.test_GetTimePoints(ID,M.ts_In,M.ts_end,15) )A ON A.ID=M.ID
ID,M.ts_In,M.ts_end,15
関数にパラメーターとして与えることができないため、明らかに機能していません。
同じ結果を達成するためのアイデアはありますか?