https://drive.google.com/file/d/1yakmTD5M2MEINdBEg2ckUTb3vw7YPFTO/view?usp=sharing
Можете ли вы помочь мне решить проблему, с которой я столкнулся, с помощью прикрепленного изображения с помощью SQL-запроса ORACLE
Я обновил информацию:
CREATE TABLE ALERT_EVENT (MEASUREMENT_POINT VARCHAR2(10), TIME_ALERT DATE, STATUS VARCHAR2(10));
INSERT INTO ALERT_EVENT VALUES('PE01', to_date('04/10/2018 00:00:00','dd/mm/yyyy hh24:mi:ss'), 'POWER ON');
INSERT INTO ALERT_EVENT VALUES('PE01', to_date('03/10/2018 00:00:00','dd/mm/yyyy hh24:mi:ss'), 'POWER OFF');
INSERT INTO ALERT_EVENT VALUES('PE01', to_date('02/10/2018 00:00:00','dd/mm/yyyy hh24:mi:ss'), 'POWER ON');
INSERT INTO ALERT_EVENT VALUES('PE01', to_date('01/10/2018 00:00:00','dd/mm/yyyy hh24:mi:ss'), 'POWER OFF');
INSERT INTO ALERT_EVENT VALUES('PE02', to_date('03/10/2018 00:00:00','dd/mm/yyyy hh24:mi:ss'), 'POWER OFF');
INSERT INTO ALERT_EVENT VALUES('PE02', to_date('02/10/2018 23:00:00','dd/mm/yyyy hh24:mi:ss'), 'POWER ON');
INSERT INTO ALERT_EVENT VALUES('PE02', to_date('02/10/2018 22:00:00','dd/mm/yyyy hh24:mi:ss'), 'POWER OFF');
INSERT INTO ALERT_EVENT VALUES('PE03', to_date('04/10/2018 10:00:00','dd/mm/yyyy hh24:mi:ss'), 'POWER OFF');
INSERT INTO ALERT_EVENT VALUES('PE03', to_date('02/10/2018 23:00:00','dd/mm/yyyy hh24:mi:ss'), 'POWER ON');
INSERT INTO ALERT_EVENT VALUES('PE03', to_date('02/10/2018 22:00:00','dd/mm/yyyy hh24:mi:ss'), 'POWER OFF');
INSERT INTO ALERT_EVENT VALUES('PE03', to_date('01/10/2018 00:00:00','dd/mm/yyyy hh24:mi:ss'), 'POWER ON');
Запрос Результат использования ORACLE Matching Pattern
QUERY 1:
select *
from ALERT_EVENT ml
MATCH_RECOGNIZE (
PARTITION BY MEASUREMENT_POINT
ORDER BY TIME_ALERT
MEASURES STRT.TIME_ALERT AS start_tstamp,
LAST(END.TIME_ALERT) AS end_tstamp
ONE ROW PER MATCH
AFTER MATCH SKIP TO LAST END
PATTERN (STRT END+)
DEFINE
STRT as STRT.STATUS like '%OFF%' ,
END AS END.STATUS like '%ON%'
) MR
ORDER BY MEASUREMENT_POINT ,start_tstamp;
QUERY 2 Получите подробную информацию:
select *
from ALERT_EVENT ml
MATCH_RECOGNIZE (
PARTITION BY MEASUREMENT_POINT
ORDER BY TIME_ALERT
MEASURES STRT.TIME_ALERT AS start_tstamp,
FINAL LAST(END.TIME_ALERT) AS end_tstamp,
MATCH_NUMBER() AS match_num,
CLASSIFIER() AS var_match
ALL ROWS PER MATCH
AFTER MATCH SKIP TO LAST END
PATTERN (STRT END+)
DEFINE
STRT as STRT.STATUS like '%OFF%',
END AS END.STATUS like '%ON%'
) MR
ORDER BY MEASUREMENT_POINT ,TIME_ALERT;
Я создал таблицу и данныев соответствии с проблемой, мы выполняем запрос, используя SQL для ORACLE Matching Pattern, и получаем результат в виде текста
MEASUREMENT_POINT START_TSTAMP END_TSTAMP
PE01 10/1/2018 10/2/2018
PE01 10/3/2018 10/4/2018
PE02 10/2/2018 10:00:00 PM 10/2/2018 11:00:00 PM
PE03 10/2/2018 10:00:00 PM 10/2/2018 11:00:00 PM
Но пропускаем пропущенные данные 2 строки
MEASUREMENT_POINT START_TSTAMP END_TSTAMP
PE02 10/3/2018 1:00 null
PE03 10/4/2018 22:00 null
Проблема: Как можноЯ запрашиваю добавить 2 строки потерянных данных?
Ссылка проблемного статус-кво Изображение https://drive.google.com/file/d/12g-kjYoiXYEjbWoywd4uf9IKJKZVExFY/view?usp=sharing