Иерархический запрос соединяется с помощью предложения start with

Данные, с которыми я работаю, упорядочены, как в следующем примере:

пример

То, что я хочу знать, это:

Хочу

Что я получаю из своего запроса, это (фактический запрос с фактическими данными размещен в конце этого сообщения):

Получить

Это код, который у меня есть сейчас, и который, я чувствую, близок к тому, чтобы дать мне то, что я хочу.

select * from (выберите отличный идентификатор, idnew, CONNECT_BY_ROOT idlast, CONNECT_BY_ISLEAF "IsLeaf", CONNECT_BY_ISCYCLE iscycle, уровень seq_order из mytable tbl1 соединяется с помощью NOCYCLE idnew = предыдущий идентификатор начинается с tll = tll tl.itemloadidnew)) abc заказ по abc.idlast, seq_order desc

Вывод, который я получаю из этого кода:

Выход

Как мне убедиться, что первое значение моих последовательностей интерпретируется как корни (а не листья как сегодня)? Насколько я понимаю, если они интерпретируются как корни, я могу напечатать столбец с id_first, а не с id_last, который у меня есть сегодня.

Помощь очень ценится!:)

1 ответ

Решение

Вы должны инвертировать connect by пункт:

select t.*, connect_by_root(id) id_first
  from mytable t 
  start with not exists (select 1 from mytable x where x.id_new = t.id)
  connect by id = prior id_new

демо-версия dbfiddle

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