首页 > 解决方案 > 找出不同状态之间的时间差

问题描述

这是我的数据集,您可以在其中看到时间和状态的变化。我想了解如何计算每个状态之间的时间差,然后累积找到每个状态的长度。将感谢您的帮助。

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

标签: sql

解决方案


假设最后一列是状态,这是一种差距和孤岛形式。我认为你可以做你想做的事情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

推荐阅读