Как создать цикл выбора sql (простой рекурсивный запрос)

#sql #oracle

#sql #Oracle

Вопрос:

У меня есть таблица, в которой у меня есть столбцы NEW_VERSION и OLD_VERSION OLD_VERSION также имеет более старую версию. Мне нужно сделать запрос, который будет выбирать всю историю версий

Например: таблица versions_table:

 OLD_VERSION | NEW_VERSION
10.333        11.111
38.888        39.999
37.777        38.888
9.222         10.333
8.111         9.222
7.999         8.111
36.666        37.777 
35.555        36.666
  

Мы знаем только самую новую версию «11.111».
Для запроса SELECT * FROM versions_table WHERE NEW_VERSION = 11.111 ...
Вывод должен быть:

 OLD_VERSION | NEW_VERSION
    10.333        11.111
    9.222         10.333
    8.111         9.222
    7.999         8.111
  

Не могли бы вы посоветовать мне, какой подход подходит для этого?

Спасибо!

Комментарии:

1. Это образец табличных данных или ожидаемый результат? Нам нужны оба! Также покажите нам вашу текущую попытку запроса!

2. Ожидаемый результат должен быть здесь.. Можно помочь лучше, если он знает, какой ожидаемый результат

3. Разве вы не можете просто написать SELECT * FROM versions_table WHERE NEW_VERSION <= 11.111 ...

4. @Jens Нет, потому что могут быть другие более низкие версии, которые мне не нужны. На выходе должна быть строгая история

5. Как вы определяете, есть ли более старая версия, которая вам не нужна? OLD_VERSION и NEW_VERSION не совпадают?

Ответ №1:

Это (простой) рекурсивный запрос:

 select *
from versions
start with new_version = '11.111'
connect by prior old_version = new_version;
  

Комментарии:

1. Спасибо, это то, что мне нужно.