2013-10-10 3 views
0

Возможно, у меня нет лучшего названия для моего вопроса, но это то, что я имею в виду. У меня есть этот результат, который возникает после запроса с несколькими соединениями.Получение следующей строки в sql с петлей

id | owner_id  | name |  order | count 
-----+--------------+-----------+--------------+------- 
274 |  25041 | first  |   1 |  0 
269 |  25041 | second |   2 |  2 
275 |  25041 | third  |   3 |  0 
276 |  25041 | fourth |   4 |  0 
273 |  25041 | fifth  |   5 |  1 
277 |  25041 | sixth  |   6 |  0 

и мне нужен запрос, который заключается в том, чтобы добавить столбец со следующим именем в зависимости от столбца заказа выше. Он должен зацикливаться на том, что он должен сказать, что после шестого следует первое.

id | owner_id  | name |  order | count | next  
-----+--------------+-----------+--------------+-------+----------- 
274 |  25041 | first  |   1 |  0 | second 
269 |  25041 | second |   2 |  2 | third 
275 |  25041 | third  |   3 |  0 | fourth 
276 |  25041 | fourth |   4 |  0 | fifth 
273 |  25041 | fifth  |   5 |  1 | sixth 
277 |  25041 | sixth  |   6 |  0 | first 
+0

возможный дубликат [Как сравнить текущую строку следующей и предыдущей строки в PostgreSQL?] (Http://stackoverflow.com/questions/ 7974866/how-to-compare-the-current-row-with-next-and-previous-row-in-postgresql) – Godeke

ответ

1

Попробуйте

select t1.* 
,CASE WHEN t2.name IS NULL THEN 'first' ELSE t2.name END as next 
from Table1 as t1 
LEFT join Table1 as t2 on t1.order = t2.order-1 

SQL FIDDLE DEMO

+0

Спасибо! .. Я не работаю для меня, но думал, потому что «первым» здесь может быть любой текст и таблица1 фактически являются результатом другого запроса. поэтому в моем случае это ... из (выберите ...) как t1 – serengeti12

Смежные вопросы