Données :
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
Voici la requête que j'utilise actuellement.
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
Le problème se situe au niveau des multiples IN_1
entrées. Je voudrais seulement suivre la différence de temps entre la première entrée et la deuxième entrée. IN_1
Entrée, et ce qui suit OUT_1
Entrée et ignorer la IN_1
entre les deux. Bien sûr, vous pourriez avoir 100 IN_1
mais le temps n'est comptabilisé qu'à partir du premier IN_1
à la prochaine OUT_1
.
Pour compliquer encore les choses, il pourrait y avoir un IN_1
, IN_2
, IN_3
, OUT_1
, OUT_2
, OUT_3
et vous pourriez entrer IN_1
et partir OUT_3
et il fonctionnerait tel quel IN_1
, OUT_1
.