sql - 每次卡车在 SQL 中没有速度时获取总时间?
问题描述
我在 SQL Server 2014 中有下表:
Vehicle_Id | Speed | Event | Datetime
-----------+---------+--------------+----------------------
1 | 0 | Door-Open | 2019-05-04 15:00:00
1 | 0 | Door-Closed | 2019-05-04 15:15:00
1 | 50 | Driving | 2019-05-04 15:35:00
1 | 0 | Parked | 2019-05-04 15:50:00
1 | 0 | Door-Open | 2019-05-04 15:51:00
1 | 0 | Door-Closed | 2019-05-04 15:52:00
1 | 50 | Driving | 2019-05-04 15:57:00
我需要识别datetime
卡车已经行驶了speed = 0
一个多小时的区域。因此,每次以速度 0 出现一行时,它应该创建一个唯一的block_id
,直到出现一行speed
。所以总时间应该是卡车第一次速度为 0 直到它找到下一行speed > 0
。
预期输出:
Vehicle_Id | Speed | Event | Datetime | Block | Total_State_Time_Block(Minutes)
-----------+---------+--------------+------------------------+-------------+---------------------------------
1 | 0 | Door-Open | 2019-05-04 15:00:00 | 1 | 35 Minutes
1 | 0 | Door-Closed | 2019-05-04 15:15:00 | 1 | 35 Minutes
1 | 50 | Driving | 2019-05-04 15:35:00 | 2 | 15 Minutes
1 | 0 | Parked | 2019-05-04 15:50:00 | 3 | 7 Minutes
1 | 0 | Door-Open | 2019-05-04 15:51:00 | 3 | 7 Minutes
1 | 0 | Door-Closed | 2019-05-04 15:52:00 | 3 | 7 Minutes
1 | 50 | Driving | 2019-05-04 15:57:00 | 4 | ...
因此,按照 的顺序datetime
,我们的想法是创建相邻行的组,speed = 0
以便我可以识别卡车超过一个小时没有移动的时间。
我尝试了窗口函数来按车辆和日期获得结果。但我无法实现这最后一步。
解决方案
你可以试试lag()
select
vehicle_id,
speed,
event,
datetime,
sum(case when speed = rnk then 0 else 1 end) over (order by datetime) as block
from
(
select
*,
lag(speed) over (order by datetime) as rnk
from myTable
) val
输出:
| vehicle_id | speed | event | datetime | block |
| ---------- | ----- | ----------- | ------------------------ | ----- |
| 1 | 0 | Door-Open | 2019-05-04 15:00:00 | 1 |
| 1 | 0 | Door-Closed | 2019-05-04 15:15:00 | 1 |
| 1 | 50 | Driving | 2019-05-04 15:35:00 | 2 |
| 1 | 0 | Parked | 2019-05-04 15:50:00 | 3 |
| 1 | 0 | Door-Open | 2019-05-04 15:51:00 | 3 |
| 1 | 0 | Door-Closed | 2019-05-04 15:52:00 | 3 |
| 1 | 50 | Driving | 2019-05-04 15:57:00 | 4 |
推荐阅读
- qt - Qt 浏览器无法打开 Unity WebGL 构建
- mysql - 从所有记录中查找匹配问题
- python - 如何获得 Locust 工人 ID?
- r - 用字段的上一个和下一个可用值的平均值替换 Dataframe 中的 NA 值
- html - jekyll 中的液体变量包含参数
- c++ - 在 C++ 中访问 json 数组值
- kubernetes - kubectl 代理无法在 Ubuntu LTS 18.04 上运行
- amp-html - (gtag) for AMP 在配置中未找到触发器。不会发送任何分析数据
- c# - 反序列化 XML 时绕过特定的父节点?
- reactjs - 如何在 MobX 中使用 @observable 装饰器定义的更改对象上添加侦听器以在 React 中使用