我有一个包含以下数据的数据库:
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)
代码如下所示:
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
。