sql - 找出不同状态之间的时间差
问题描述
这是我的数据集,您可以在其中看到时间和状态的变化。我想了解如何计算每个状态之间的时间差,然后累积找到每个状态的长度。将感谢您的帮助。
|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|
解决方案
假设最后一列是状态,这是一种差距和孤岛形式。我认为你可以做你想做的事情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
推荐阅读
- amazon-web-services - aws glue python shell 作业与 spark 作业的最佳用例是什么?
- scala - 更新映射定义是使用 Scala 的 ELlasticSearch
- javascript - 不同数组中相同对象的内存分配
- laravel - 我怎样才能重写它,这样它就不需要在 foreach 之外的 return 语句
- c# - 从另一个窗口访问 MainWindow 列表(保护)
- tableau-api - tableau - 自动更新工作台中所有数据源的密码
- xamarin.forms - SwipeCardView 在滚动视图上效果不佳
- python - Python程序在几个小时后冻结
- r - 指示 R 在制作随机森林决策树时遵循一定的顺序
- javascript - 闭上眼睛