我有一个包含以下数据的数据库:
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
我试图找出每组中连续行之间的时间差异。使用LAG()
和DATEDIFF()
(即https://stackoverflow.com/a/43055820),现在我有以下结果集:
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
但是,我需要在达到新组时重置差异,如下所示。有人可以建议吗?
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
答案 0 :(得分:4)
代码看起来像:
select t.*,
datediff(second, lag(time) over (partition by group order by id), time)
from t;
这会将差异返回为秒数,但您似乎知道如何将其转换为时间表示。您似乎也知道group
不能作为列名接受,因为它是一个SQL关键字。
根据这个问题,您已将group
放在order by
的{{1}}条款中,而不是lag()
。