数据:
EmpNumber、TimeStamp、AreaName 10632, 2009-11-23 16:40:33.000, OUT_1 10632, 2009-11-23 16:39:03.000, IN_1 10632, 2009-11-23 16:38:56.000, IN_1 10632, 2009-11-23 15:31:51.000, OUT_1 10632, 2009-11-23 15:31:48.000, IN_1 10632, 2009-11-23 15:31:43.000, IN_1 10632, 2009-11-23 15:31:14.000, OUT_1 10632, 2009-11-23 15:31:08.000, IN_1 10632, 2009-11-23 15:29:18.000, OUT_1 10632, 2009-11-23 15:28:29.000, IN_1 10632, 2009-11-23 15:27:35.000, OUT_1 10632, 2009-11-23 15:26:35.000, IN_1 10632, 2009-11-23 15:22:55.000, IN_1
这是我目前正在使用的查询。
SELECT [EmpNumber], [TimeStamp], [AreaName],
DATEDIFF(second, [TimeStamp], (SELECT TOP 1 [TimeStamp]
FROM [EventTable] EV2
WHERE EV2.[TimeStamp] > EV1.[TimeStamp]
AND AreaName = 'OUT_1'
AND EV2.[EmpNumber] = EV1.[EmpNumber])
)/60.00 DurationMins
FROM [EventTable] EV1
WHERE AreaName = 'IN_1'
ORDER BY [TimeStamp] DESC
问题出在多个IN_1
条目上。我只想跟踪第一个IN_1
条目和下一个条目之间的时间差,OUT_1
并忽略IN_1
两者之间的条目。当然,您可以有 100 个IN_1
,但时间仅从第一个IN_1
到下一个进行跟踪OUT_1
。
更复杂的是,可能会有一个IN_1
, IN_2
, IN_3
, OUT_1
, OUT_2
,OUT_3
并且你可以进入IN_1
和离开OUT_3
并且它会照原样工作IN_1
, OUT_1
。