如何比较 SQL 中最后一行的差异

How to compare the difference for the last row in SQL

我有一个观点,这是它的结果:

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

我正在尝试使用下面的查询按类型比较行和组之间的时间差。我的问题是最后一行我想得到当前时间的差异并计算差异的总和。这是正在使用的查询。如何仅将最后一行与当前时间进行比较并计算总和:

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

使用LEFT JOINISNULL函数:

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    @t p
        LEFT JOIN @t q ON p.RowNum = q.RowNum - 1
GROUP BY p.ID ,
         p.Type

输出:

18  2   483
18  5   21186
18  6   74665

如果您使用的是 SQL Server 2012 或更高版本,这将有效

;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

LEAD()

参考

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