SQL-запрос для преобразования списка чисел в 2 столбца

Как написать запрос, чтобы преобразовать список чисел в 2 столбца.
например, у меня есть таблица со столбцом ID со значениями (3, 6, 9, 12, 15, 18).

Я хотел бы получить результат

ID NEXT_ID 3 6 6 9 9 12 12 15 15 18 

Обратите внимание, что это должно работать для любой последовательности идентификаторов, не обязательно кратных 3.
Я работаю над Oracle 11.2

 SELECT first.ID, min(second.ID) as NEXT_ID FROM TABLE_NAME first, TABLE_NAME second WHERE first.ID < second.ID GROUP BY first.ID 

Вы можете использовать аналитические функции Oracle для этой цели

 SELECT ID, LEAD(ID, 1) OVER (ORDER BY ID) AS NEXTID FROM TABLE 

FYI Это одно из многих возможных решений в mysql (может также работать для оракула, но я не знаю).

Скрипт, приведенный ниже, в основном непосредственно исполняемый и приведет к:

 Id Next === ==== 3 6 6 9 9 12 12 15 15 18 

Вот сценарий.

 CREATE TABLE `Numbers` ( `Id` INT NOT NULL PRIMARY KEY ); INSERT INTO `Numbers` (`Id`) VALUES (3), (6), (9), (12), (15), (18); SELECT `Number`.`Id` ,`Next`.`Id` AS `Next` FROM `Numbers` AS `Number` LEFT JOIN `Numbers` AS `Next` ON `Next`.`Id` > `Number`.`Id` GROUP BY `Number`.`Id` HAVING `Next`.`Id` = MIN(`Next`.`Id`);