Mam jedną tabelę alarmu związanego z bezpieczeństwem i normalnym alarmem sprzętu. Te alarm są rejestrowane. Tabela wygląda jak

   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

Dla znacznika związanego z bezpieczeństwem; Jeśli rekord = 0, alarm jest włączony i nagrywanie = 1, alarm jest wyłączony (warunek1) dla normalnego znacznika sprzętu; Jeśli rekord = 1, alarm jest włączony i rekord = 0, alarm jest wyłączony (warunek2)

Co próbuję zdobyć

        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

Mam listę normalnych tagów sprzętu. Jeśli ta nazwa znacznika jest dostępna na liście, para włączania / wyłączania alarmu należy utworzyć na stanie 2, albo alarm włączony / wyłączony powinien być oparty na stanie 1.

Uwaga: To staje się trudne, gdy wyposażenie jest wyłączone i nałączone. Cała znacznik wyposażenia zostaną zainicjowane za pomocą wartości 0 i tagu bezpieczeństwa z 1.

Dołączony zestaw danych Link: https://drive.google.com/File/d/19nim_wwjdqsoudc3o5g9pfw2insq4got / Zobacz.

Normal Equip Tag Link: https://drive.google.com/File/d / 1UFFT-M4J6XLZKKVQK8QJJJSRZUQJ6JJWSG / Widok

-1
Nandan 22 listopad 2020, 22:04

1 odpowiedź

Najlepsza odpowiedź

Myślę, że możesz wykonać tę pracę z 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
0
Philipp Johannis 22 listopad 2020, 19:29