我正在尝试使用 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
函数作为参数。
有什么想法可以达到相同的结果吗?