хотите найти начальную и конечную точку непоследовательного числа в хранимой процедуре оракула

Предположим, что основная таблица

ID  Usage_flah
1     null
2     null
3     null
4     Yes
5     Yes
6     Null
7     NUll

Теперь мне нужны начальная и конечная позиция идентификатора во второй таблице результатов, где usage_flag равно null.

подобно

Start  End
1      3
6      7

1 ответ

Решение

Вот один из способов (демонстрирующий, почему важно знать свою версию Oracle: в этом решении используется match_recognize, представленный в Oracle 12.1)

В withпредложение предназначено только для имитации ваших входных данных; вы должны удалить его и использовать свои фактические имена таблиц и столбцов в основном запросе (select * .......)

with
  main_table (id, usage_flag) as (
    select 1, null  from dual union all
    select 2, null  from dual union all
    select 3, null  from dual union all
    select 4, 'Yes' from dual union all
    select 5, 'Yes' from dual union all
    select 6, null  from dual union all
    select 7, null  from dual
  )
select *
from   main_table
match_recognize (
  order by id
  measures first(id) as id_start, last(id) as id_end
  pattern  ( n+ )
  define   n as usage_flag is null
);

  ID_START     ID_END
---------- ----------
         1          3
         6          7
Другие вопросы по тегам