指定ID的两行之间的时间差

时间:2016-01-05 20:09:41

标签: sql-server-2012

我正在尝试找到具有相同ID的两行之间的时间差。

这是一张简单的表格。

enter image description here

该表格由myidtimestamp排序。我试图获得具有相同myid的两行之间的总秒数。

这是我想出的。此查询的唯一问题是它计算所有记录的时间差,但不计算相同ID的时间差。

SELECT  DATEDIFF(second, pTimeStamp, TimeStamp), q.*
FROM    (
            SELECT  *,
            LAG(TimeStamp) OVER (ORDER BY TimeStamp) pTimeStamp
            FROM    data
        ) q
WHERE   pTimeStamp IS NOT NULL 

这是输出。

enter image description here

我只希望输出以黄色突出显示。

有什么建议吗?

SQLFIDDLE

1 个答案:

答案 0 :(得分:4)

修复只是将窗口(PARTITION BY)缩小到具有相同ID的行:

SELECT  DATEDIFF(second, pTimeStamp, TimeStamp), q.*
FROM    (
            SELECT  *,
            LAG(TimeStamp) OVER (PARTITION BY ID ORDER BY TimeStamp) pTimeStamp
            FROM    data
        ) q
WHERE   pTimeStamp IS NOT NULL