Comment comparer la différence pour la dernière ligne dans SQL

J'ai une vue et c'est le résultat de celui-ci:

ID Type Time RowNum 18 2 2015-12-14 12:15:00.9330000 +00:00 214 18 6 2015-12-14 12:21:22.4330000 +00:00 215 18 2 2015-12-15 09:04:41.2870000 +00:00 216 18 6 2015-12-15 09:06:22.9400000 +00:00 217 18 5 2015-12-15 09:07:28.0130000 +00:00 218 

J'essaie de comparer la différence de time entre les lignes et le groupe par le type en utilisant la requête ci-dessous. Mon problème est pour la dernière rangée je veux faire la différence avec l'heure actuelle et calculer la sum de la différence. C'est la requête que j'utilise. Comment comparer seulement pour la dernière rangée avec l'heure actuelle et calculer la sum:

 WITH rows AS (SELECT * FROM [dbo].[View]) SELECT p.ID , p.Type , SUM(DATEDIFF(SECOND, p.Time, q.Time)) FROM rows p JOIN rows q ON p.RowNum = q.RowNum - 1 GROUP BY p.ID , p.Type 

Utilisez la fonction LEFT JOIN et ISNULL :

 DECLARE @t TABLE ( ID INT , Type INT , Time DATETIMEOFFSET , RowNum INT ) INSERT INTO @t VALUES ( 18, 2, '2015-12-14 12:15:00.9330000 +00:00', 214 ), ( 18, 6, '2015-12-14 12:21:22.4330000 +00:00', 215 ), ( 18, 2, '2015-12-15 09:04:41.2870000 +00:00', 216 ), ( 18, 6, '2015-12-15 09:06:22.9400000 +00:00', 217 ), ( 18, 5, '2015-12-15 09:07:28.0130000 +00:00', 218 ); SELECT p.ID , p.Type , SUM(DATEDIFF(SECOND, p.Time, ISNULL(q.Time, GETDATE()))) FROM @tp LEFT JOIN @tq ON p.RowNum = q.RowNum - 1 GROUP BY p.ID , p.Type 

Sortie:

 18 2 483 18 5 21186 18 6 74665 

Si vous utilisez SQL Server 2012 ou supérieur, cela fonctionnera

 ;WITH CTE AS ( SELECT a.ID ,a.Type ,a.Time, ISNULL(LEAD(a.Time) OVER (Order by RowNum ASC),GETDATE()) AS NextTime FROM FROM [dbo].[View] a ) SELECT ID, Type, SUM(DATEDIFF(SECOND, CTE.Time, CTE.NextTime)) FROM CTE GROUP BY ID, Type 

Référence pour LEAD ()

https://msdn.microsoft.com/en-IN/library/hh213125.aspx