Somme le time écoulé entre les horodatages SQL Server

J'ai une requête qui me renvoie le nombre de secondes entre les horodatages pour les events se produisant sur la production d'une machine donnée.

Je veux get le time total groupé par le statusCode de la machine pendant cette durée. Ex. En cours d'exécution, time d'arrêt non planifié, time d'arrêt planifié.

Je pense que cela implique un agrégat d'un agrégat que je sais n'est pas autorisé. Je suis sûr qu'il y a un moyen de faire cela

SELECT p1.productionRunId, p1.statusCodeId, DATEDIFF(SECOND, MAX(p2.startTime), p1.startTime) AS seconds FROM productionLog p1 INNER JOIN wincc.dbo.productionLog p2 ON p1.productionRunId = p2.productionRunId AND p2.startTime < p1.startTime GROUP BY p1.startTime, p1.productionRunId, p1.statusCodeId 

Voici une photo de mes résultats actuels avec une description de ce que je voudrais.

Je pense que tu l'as presque eu. Vous pouvez utiliser la requête SELECT ci-dessus en tant que sous-requête d'une autre requête pour gérer la sommation des périodes. Voir si cela fait ce que vous cherchez:

 declare @p table (startTime datetime, productionRunId int, statusCodeId int) insert @p values ('1/1/2016 15:43:00', 1, 1), ('1/1/2016 15:43:05', 1, 1), ('1/1/2016 15:43:01', 2, 2), ('1/1/2016 15:43:09', 2, 2), ('1/1/2016 15:44:02', 2, 2), ('1/1/2016 15:44:09', 2, 2), ('1/1/2016 15:44:31', 3, 1), ('1/1/2016 15:44:45', 3, 1) SELECT productionRunId, statusCodeId, SUM(seconds) AS totalSeconds FROM ( SELECT p1.productionRunId, p1.statusCodeId, DATEDIFF(SECOND, MAX(p2.startTime), p1.startTime) AS seconds FROM @p p1 INNER JOIN @p p2 ON p1.productionRunId = p2.productionRunId AND p2.startTime < p1.startTime GROUP BY p1.startTime, p1.productionRunId, p1.statusCodeId ) AS ElapsedPeriods GROUP BY productionRunId, statusCodeId