将时间序列事件转换为警报开启和警报关闭对

Convert Time series Events into Alarm on and Alarm off pair

我有一个 table 安全相关警报和正常设备警报。这些警报正在记录中。 table 看起来像

   Name                        record     Timestamp
S303R2_LS_STN_ATD_SENSOR_ERR    1   19-11-2020 06:22:53
S303R2_LS_STN_ATD_SENSOR_ERR1   1   19-11-2020 06:22:53
S303R2_LS_STN_ATD_SENSOR_ERR    0   19-11-2020 06:22:55
S303R2_LS_STN_ATD_SENSOR_ERR1   0   19-11-2020 06:22:55
S304R2_LS_STN_ATD_SENSOR_ERR    1   19-11-2020 07:05:28
S304R2_LS_STN_ATD_SENSOR_ERR    0   19-11-2020 07:05:30

用于安全相关标签;如果 record=0,报警开启,record=1,报警关闭(条件 1) 对于普通设备标签;如果记录=1,报警开启,记录=0,报警关闭(条件 2)

我想得到的是

        Name                              intime                   outtime 
    S303R2_LS_STN_ATD_SENSOR_ERR    19-11-2020 06:22:53   19-11-2020 06:22:55
    S303R2_LS_STN_ATD_SENSOR_ERR1   19-11-2020 06:22:53   19-11-2020 06:22:55
    S304R2_LS_STN_ATD_SENSOR_ERR    19-11-2020 07:05:28   19-11-2020 07:05:30
    S302R1_LS_STN_ATD_SENSOR_ERR    19-11-2020 08:07:08   19-11-2020 08:07:15

我有一个普通设备标签列表。如果此标签名称在列表中可用,则应在条件 2 上形成警报 on/off 对,否则警报 on/off 应基于条件 1.

注意:当设备关闭再打开时,这会变得很棘手。所有装备标签都将初始化为值 0,安全标签初始化为 1。

附加数据集link:https://drive.google.com/file/d/19NIm_WWJDqSOUDc3O5G9pFW2InsQ4GOT/view

普通装备标签link:https://drive.google.com/file/d/1UFFT-m4j6xlzKVQk8qjjsrZuQj6jJwSG/view

我想你可以用 LEAD():

WITH ordered_data as
(
   SELECT *
   ,LEAD(td.Timestamp,1,NULL)OVER(PARTITION BY td.Name ORDER by td.Timestamp) next_event
   FROM table_data td
)
--Normal equipment tags
SELECT Name,Timestamp intime, next_event outtime
FROM ordered_data
WHERE record = 1
AND Name IN ('S303R2_LS_STN_ATD_SENSOR_ERR','S303R2_LS_STN_ATD_SENSOR_ERR1') --add all names here or do a subselect if you have the list
UNION 
--safety related tags
SELECT Name,Timestamp intime, next_event outtime
FROM ordered_data
WHERE record = 0
AND Name NOT IN ('S303R2_LS_STN_ATD_SENSOR_ERR','S303R2_LS_STN_ATD_SENSOR_ERR1') --add all names here or do a subselect if you have the list