найти запросы с возвращаемым статусом в SQl Oracle

У меня есть запросы с датой и статусом. для каждого запроса есть несколько статусов, и стандартом является то, что он всегда переходит от низкого к высокому статусу. Один запрос может быть обработан несколько раз в одном стутусе.

есть несколько сценариев

  1. Я хотел бы найти запросы, в которых происходит возврат из статуса 50,51 или 52 в статус 20 напрямую + сколько раз это произошло в одном запросе. например 50 -> 20

  2. возврат из статуса 50,51 или 52 в статус 20 прямо или косвенно= например 52 -> 15.... -> 20 + сколько раз

    создавать запросы к таблице (запрос varchar2(12), дата начала отсчета, номер статуса);

             insert into requests values ('request1',to_date('01-01-2020','dd-MM-yyyy'),1);
     insert into requests values ('request1',to_date('02-01-2020','dd-MM-yyyy'),10);
     insert into requests values ('request1',to_date('03-01-2020','dd-MM-yyyy'),10);
     insert into requests values ('request1',to_date('04-01-2020','dd-MM-yyyy'),20);
     insert into requests values ('request1',to_date('08-01-2020','dd-MM-yyyy'),51);
     insert into requests values ('request1',to_date('09-01-2020','dd-MM-yyyy'),52);
     insert into requests values ('request1',to_date('11-01-2020','dd-MM-yyyy'),60);
    
     insert into requests values ('request2',to_date('01-01-2020','dd-MM-yyyy'),10);
     insert into requests values ('request2',to_date('02-01-2020','dd-MM-yyyy'),20);
     insert into requests values ('request2',to_date('06-01-2020','dd-MM-yyyy'),50);
     insert into requests values ('request2',to_date('07-01-2020','dd-MM-yyyy'),20);
     insert into requests values ('request2',to_date('08-01-2020','dd-MM-yyyy'),51);
     insert into requests values ('request2',to_date('12-01-2020','dd-MM-yyyy'),20);
     insert into requests values ('request2',to_date('13-01-2020','dd-MM-yyyy'),50);
     insert into requests values ('request2',to_date('15-01-2020','dd-MM-yyyy'),52);
    
     insert into requests values ('request3',to_date('01-01-2020','dd-MM-yyyy'),1);
     insert into requests values ('request3',to_date('02-01-2020','dd-MM-yyyy'),20);
     insert into requests values ('request3',to_date('05-01-2020','dd-MM-yyyy'),52);
     insert into requests values ('request3',to_date('06-01-2020','dd-MM-yyyy'),15);
     insert into requests values ('request3',to_date('09-01-2020','dd-MM-yyyy'),20);
     insert into requests values ('request3',to_date('10-01-2020','dd-MM-yyyy'),20);
     insert into requests values ('request3',to_date('15-01-2020','dd-MM-yyyy'),51);
     insert into requests values ('request3',to_date('16-01-2020','dd-MM-yyyy'),51);
     insert into requests values ('request3',to_date('18-01-2020','dd-MM-yyyy'),52);
    

запрос1 не имеет возврата в статус 20 в сценарии 1 только запрос2 с 2 возвратами в сценарии 2 запрос2 с 2 возвратами и запрос3 с одним возвратом (в данном случае косвенно)

вероятно, match_recognize будет первым выбором, но я не очень разбираюсь в этом пункте. Было бы интересно, как это можно сделать с другой техникой. С помощью функции Lag для проверки предыдущего статуса и статуса случая проверяется, сколько строк с 20 и предыдущим статусом в (50,51,52) для каждого запроса, но таким образом, я думаю, можно выполнить только сценарий 1.

Любые идеи?

Благодарность

0 ответов

Другие вопросы по тегам