This is my data set ,您可以在其中查看时间和状态更改。我想了解如何计算每个状态之间的时间差,然后累计找到每个状态的时长。感谢您的帮助。
|41339 |2019-08-04 09:05:13.847| |0|
|41339 |2019-08-04 09:06:18.787| |1|
|41339 |2019-08-04 09:07:16.150| |1|
|41339 |2019-08-04 09:07:37.767| |1|
|41339 |2019-08-04 09:07:41.933| |0|
|41339 |2019-08-04 09:08:03.393| |1|
|41339 |2019-08-04 09:26:52.340| |2|
答案 0 :(得分:0)
假设最后一列是状态,这是一种空白和孤岛的形式。我认为您可以使用lag()
做您想做的事情,以确定状态从哪里开始,然后使用lead()
结束:
select t.*,
datediff(second, datetime,
lead(datetime) over (partition by col1 order by datetime)
) as duration_seconds
from (select t.*, lag(status) over (partition by col1 order by datetime) as prev_status
from t
) t
where prev_status is null or prev_status <> status