如何使用 SQL 根据条件定义 EventStop timeStamp?
How to define EventStop timeStamp based on condition using tSQL?
我正在尝试弄清楚以下内容:
- 我有一个引用相应机器的时间戳列表
状态(1 或 0)
- 我有兴趣生成新的 table where:the 机器跳转到机器状态 1 (START) 的第一个时间戳和机器发生故障的时间戳(machinestate = 0,reasonID = 15) (结束)
图片 1
图片2
这是一个典型的间隙和孤岛问题,您打算将具有相同状态的连续行组合在一起。
这是一种使用行号之间的差异来解决它的方法。
select
equipment_id,
min(timestamp) event_start,
max(timestamp) event_stop,
machine_state_id,
max(reason_id) reason_id
from (
select
t.*,
row_number() over(partition by equipment_id order by timestamp) rn1,
row_number() over(partition by equipment_id, machine_state_id order by timestamp) rn2
from mytable t
) t
group by equipment_id, machine_state_id, rn1 - rn2
order by equipment_id, event_start
我正在尝试弄清楚以下内容:
- 我有一个引用相应机器的时间戳列表 状态(1 或 0)
- 我有兴趣生成新的 table where:the 机器跳转到机器状态 1 (START) 的第一个时间戳和机器发生故障的时间戳(machinestate = 0,reasonID = 15) (结束)
图片 1
图片2
这是一个典型的间隙和孤岛问题,您打算将具有相同状态的连续行组合在一起。
这是一种使用行号之间的差异来解决它的方法。
select
equipment_id,
min(timestamp) event_start,
max(timestamp) event_stop,
machine_state_id,
max(reason_id) reason_id
from (
select
t.*,
row_number() over(partition by equipment_id order by timestamp) rn1,
row_number() over(partition by equipment_id, machine_state_id order by timestamp) rn2
from mytable t
) t
group by equipment_id, machine_state_id, rn1 - rn2
order by equipment_id, event_start