Следующая запись за текущей

iceman

говнокодер
например есть запрос
Код:
Select * from table order by 1
выводит
id name
1 name1
2 name2
3 name3

нужно на записи 1 добавить 3ю колонку с записью name2
на 2ой - name3
на 3ей - null

вроде как то с помощью аналитических функций это делается, вот только не могу сообразить с помощью какой и как...
 

iceman

говнокодер
таблица должна выглядить так
1 name1 name2
2 name2 name3
3 name3 null
 

dimagolov

Новичок
а набуя такой изврат понадобился? как бы в рамках РСУБД порядок выборки не существенен, так что "хотите вы странного". или это тестовое задание, которое отражает неадекватность автора теста?

п.с. если id без дырок то решается элементарно через left join на самого себя. в иных, сколько-нибудь более сложных случаях это редкостный изврат с подзапросами и временными таблицами, ничего уникального, но полный маразм с точки зрения практической применимости.
 

iceman

говнокодер
порядок есть -> order by 1

в Oracle можно вытаскивать строки, если указать порядок строк...

не обходимость отпала! но все равно интересно как это реализовать ) я такое вроде как делал, ща ищу в проектах где же эта шляпа )
 

phprus

Moderator
Команда форума
prolis
connect by - это рекурсивный запрос. И предназначено оно для обхода рекурсивных структур данных, например, деревьев.

dimagolov, ты не прав. Во первых для этого не нужны ни подзапросы, ни временные таблицы, ни даже join'ы. Во вторых в аналитике сдвиг данных операция нормальная и не редкая. Хотя-бы для того, чтобы элементарно сравнить что было вчера и что стало сегодня. Если это тестовое задание, то оно проверяет знание аналитических функций Oracle-SQL, которые многие выборки значительно упрощают. Кстати говоря аналитические функции в Oracle умеют еще очень много интересного, что с точки зрения реализации на чистом SQL было бы очень и очень извратно.

iceman
В Oracle есть аналитические функции, для операций над группами элементов без свертки строк ( как при применении group by )
Для сдвига по результсету применяются LAG/LEAD - функции.
Кратко, но по русски - http://ru.wikipedia.org/wiki/Аналитические_функции
Подробно, но на английском - http://download.oracle.com/docs/cd/B19306_01/server.102/b14223/analysis.htm
 
Сверху