#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. Спасибо, это то, что мне нужно.