如何使用tSQL根据条件定义EventStop timeStamp?

问题描述 投票:1回答:1

我正在尝试找出以下内容:

  • 我有一个引用相应机器的时间戳列表状态(1或0)
  • 我有兴趣生成一个新表,其中:机器跳转到机器状态1的第一个时间戳(START),机器崩溃的时间戳(machinestate = 0,reasonID = 15)(END)

图片1

enter image description here

图2enter image description here

sql tsql group-by gaps-and-islands
1个回答
0
投票

这是一个典型的空白问题,您打算将状态相同的连续行组合在一起。

这里是使用行号之间的差异来解决它的一种方法。

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
© www.soinside.com 2019 - 2024. All rights reserved.