soundie
@soundie

Как выбрать следующие строчки в таблице после каждой уже выбранной строчки?

Есть простая таблица из двух столбцов, где ID идут по возрастанию, но не всегда на единицу больше предыдущего значения:
1 aaa
5 bbb
7 ccc
8 ddd

К этой таблице идёт обычный SELECT по какому-либо WHERE критерию. Например были выбраны две строчки с идентификаторами 5 и 8.

При помощи какого SQL-запроса можно выбрать следующие по порядку строки после этих выбранных строк (если сортировка идёт по ID)?

То есть правильным ответом такого SQL-запроса для вышеуказанной таблицы должна быть одна строка (она идёт после записи с идентификатором 5):

7 ccc

Так как после идентификатора 8 строки в таблице нет, то она и не выводятся. Но если бы была, то SQL-запрос должен её вывести. Нужна именно одна последующая запись после каждой выбранной ранее. Дублей ID в таблице нет.

P.S. Понятно что можно создавать для каждой отдельной такой строчки отдельный SQL-запрос где получать следующую запись, но если строк будет много, то это получится куча SQL-запросов, что не очень хорошо. Как всё оформить в одном запросе, который на выходе получает несколько ранее выбранных идентификаторов (при помощи обычного SELECT WHERE)?
  • Вопрос задан
  • 18 просмотров
Решения вопроса 1
soundie
@soundie Автор вопроса
Удалось при помощи вот этой вот вырвиглазной магии с оконными функциями (костыль, но работает):
SELECT group_concat(id) OVER (
	ORDER BY id ROWS BETWEEN CURRENT ROW AND 1 FOLLOWING EXCLUDE CURRENT ROW
) AS next_ids
FROM table
ORDER BY id;


Тем не менее, более элегантные версии конечно приветствуются.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы