获取同一组中连续行之间的日期差异

use*_*948 1 sql t-sql

我有一个包含以下数据的数据库:

Group      ID      Time
1          1       16:00:00
1          2       16:02:00
1          3       16:03:00
2          4       16:09:00
2          5       16:10:00
2          6       16:14:00
Run Code Online (Sandbox Code Playgroud)

我试图找出每组中连续行之间的时间差异。使用LAG()DATEDIFF()(即/sf/answers/3013907431/),现在我有以下结果集:

Group      ID       Difference
    1          1    NULL
    1          2    00:02:00
    1          3    00:01:00
    2          4    00:06:00
    2          5    00:01:00
    2          6    00:04:00
Run Code Online (Sandbox Code Playgroud)

但是,当到达新组时,我需要重置差异,如下所示。任何人都可以建议吗?

Group      ID       Difference
    1          1    NULL
    1          2    00:02:00
    1          3    00:01:00
    2          4    NULL
    2          5    00:01:00
    2          6    00:04:00
Run Code Online (Sandbox Code Playgroud)

Gor*_*off 6

代码如下所示:

select t.*,
       datediff(second, lag(time) over (partition by group order by id), time)
from t;
Run Code Online (Sandbox Code Playgroud)

这以秒数形式返回差异,但您似乎知道如何将其转换为时间表示。您似乎也知道group作为列名是不可接受的,因为它是 SQL 关键字。

根据这个问题,您已经放入group了 的order by子句,而lag()不是partition by