将时间序列事件转换为警报开启和警报关闭对
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
我有一个 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