sql получение по запросу строки для следующей или предыдущей строки текущей строки

id    |  photo title     |  created_date

XEi43 |  my family       |  2009 08 04
dDls  |  friends group   |  2009 08 05
32kJ  |  beautiful place |  2009 08 06
EOIk  |  working late    |  2009 08 07 

Скажите, что у меня есть идентификатор 32kJ. Как я получил бы следующую строку или предыдущую?

12
задан alex 21 August 2012 в 08:53
поделиться

3 ответа

Я понимаю, что вы используете MySQL, но только для справки, вот как это можно сделать с помощью аналитических функций Oracle LEAD и LAG:

select empno, ename, job,
  lag(ename, 1) over (order by ename) as the_guy_above_me,
  lead(ename, 2) over (order by ename) as the_guy_two_rows_below_me
from emp
order by ename

Думаю, есть причина, по которой Oracle стоит денег, а MySQL - бесплатен ...: -)

На этой странице показано , как эмулировать аналитические функции в MySQL .

2
ответ дан 2 December 2019 в 07:03
поделиться

Ужасный хакер - мне это не нравится, но может сработать ..

with yourresult as
(
select id, photo_title, created_date, ROW_NUMBER() over(order by created_date) as 'RowNum' from your_table
)
-- Previous
select * from yourresult where RowNum = ((select RowNum from yourresult where id = '32kJ') -1)
-- Next
select * from yourresult where RowNum = ((select RowNum from yourresult where id = '32kJ') +1)

Какой толк?

0
ответ дан 2 December 2019 в 07:03
поделиться

Вы хотели следующую / предыдущую строку по дате? Если это так, вы можете сделать это:

select MyTable.*
from MyTable
join
  (select id
   from MyTable
   where created_date < (select created_date from MyTable where id = '32kJ')
   order by created_date desc, id desc
   limit 1
  ) LimitedTable on LimitedTable.id = MyTable.fund_id;
2
ответ дан 2 December 2019 в 07:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: