найти запросы с возвращаемым статусом в SQl Oracle
У меня есть запросы с датой и статусом. для каждого запроса есть несколько статусов, и стандартом является то, что он всегда переходит от низкого к высокому статусу. Один запрос может быть обработан несколько раз в одном стутусе.
есть несколько сценариев
Я хотел бы найти запросы, в которых происходит возврат из статуса 50,51 или 52 в статус 20 напрямую + сколько раз это произошло в одном запросе. например 50 -> 20
возврат из статуса 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.
Любые идеи?
Благодарность