找出不同状态之间的时差

时间:2019-08-06 10:36:55

标签: sql

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|

1 个答案:

答案 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