包含数据行的表,其中包含操作的日期及其状态
Date Status
2018-08-03 06:25:36.000 3
2018-08-03 06:26:40.000 4
2018-08-03 06:26:43.000 3
2018-08-03 06:27:29.000 5
2018-08-03 06:27:37.000 4
2018-08-03 06:30:07.000 6
2018-08-03 06:45:19.000 3
2018-08-03 06:53:39.000 5
2018-08-03 06:54:54.000 4
2018-08-03 07:03:43.000 6
2018-08-03 07:03:52.000 3
2018-08-03 07:05:44.000 4
我需要完成的是遍历此数据集,首先获取状态3,然后立即获取状态4的下一次,并计算这两个日期之间的DateDiff。
因此,在给定的示例中,我想遍历整个数据集,获取第一行(状态3的第一次出现),获取第二行(此后状态4的第一次出现),计算DateDiff并移动到包含状态3,然后找到状态4的下一行,计算DateDiff并继续操作,直到遍历整个数据集,并且完成状态3和状态4之间的所有日期差异。
这可以通过游标完成吗,或者它们不适合这样做,因为我们需要的下一行可能不是数据集中的实际下一行?
答案 0 :(得分:1)
您可以使用CURSOR
查找状态为3的每个日期,然后使用TOP 1
查找状态为4的下一个日期。
DECLARE @DateStatus3 AS DATETIME
DECLARE C_Status3 CURSOR FOR
SELECT [Date] AS DateStatus3 FROM StatusTable WHERE Status = 3
OPEN C_Status3
FETCH NEXT FROM C_Status3 INTO @DateStatus3
WHILE @@FETCH_STATUS = 0
BEGIN
DECLARE @DateStatus4 AS DATETIME
SELECT @DateStatus4 = NULL
SELECT TOP 1 @DateStatus4 = [Date] FROM StatusTable WHERE Status = 4 AND Date >= @DateStatus3 ORDER BY [Date]
IF @DateStatus4 IS NOT NULL
PRINT DATEDIFF(SECOND, @DateStatus3, @DateStatus4)
FETCH NEXT FROM C_Status3 INTO @DateStatus3
END
CLOSE C_Status3
DEALLOCATE C_Status3