データ:
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