коррелированный запрос, чтобы получить начальную и конечную последовательности в SQL оракуле - PullRequest
0 голосов
/ 06 ноября 2018

У меня есть такая таблица:

employee type seq
A        loa  1
A        loa  2
A        rfl  3
A        loa  4
A        rfl  5
A        loa  6
A        loa  7
A        rfl  8

Теперь я хочу таблицу, которая дает мне для всех начальных и конечных последовательностей. Начальная последовательность - это просто текущая последовательность этой строки. Конечная последовательность - это последовательность первых rfl после этой последовательности. Поэтому для моего примера результат должен быть:

employee type beginSeq endSeq
A        loa  1        3
A        loa  2        3
A        loa  4        5
A        loa  6        8
A        loa  7        8

Я думал сделать две таблицы. стол loa =

select * from table where type='loa'

и стол rfl =

    select * from table where type='rfl'

Тогда я просто подумал, что смогу сделать это:

select loa.* from loa
    left join (select min(seq) from rfl where rfl.seq>=loa.seq)
    on rfl.employee = loa.employee

но, к сожалению, loa.seq в подзапросе на данный момент неизвестен. Кто-то внушает предложение?

Ответы [ 2 ]

0 голосов
/ 06 ноября 2018

В Oracle я бы использовал lead():

select *
from (select loa.*,
             lead(case when type = 'rfl' then seq end ignore nulls) over (partition by employee order by seq) as end_seq
      from loa
     ) loa
where type = 'loa';

ignore null s выводит следующее не null значение. Оператор case ищет только значения 'rfl'.

Вы также можете выразить это как:

select *
from (select loa.*,
             min(case when type = 'rfl' then seq end) over (partition by employee order by seq rows between current row and unbounded following) as end_seq
      from loa
     ) loa
 where type = 'loa';
0 голосов
/ 06 ноября 2018

Вы можете использовать коррелированный подзапрос как:

select t.*,
       ( select min(seq) from tab where type = 'rfl' and seq > t.seq )
       as endSeq
  from tab t
 where t.type = 'loa'
 order by t.seq;

Rextester Demo

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...