LEAD()
функция извлекает значение «следующий ряд».Я не знаю, почему вы называете это prev
.Вместо этого я использую псевдоним next
для ясности.
При использовании пользовательских переменных мы можем получить доступ к значению предыдущей строки в предложении SELECT
, но получить значение следующей (следующей) строки довольно сложно.Нам придется явно упорядочить по inbp_ingangsdatum
в порядке убывания (в противоположность нашему окончательному требованию сортировки).
Теперь мы будем использовать этот набор результатов, чтобы получить «следующую» строку.Из-за обратного порядка предыдущее значение в основном является следующим значением.
Наконец, мы изменим порядок набора результатов в самом внешнем запросе.
Схема (MySQL v5.6)
Create table base (inbp_ingangsdatum int);
insert into base
values
(20090101),
(20120401),
(20120402),
(20120403),
(20120404),
(20120405);
Запрос № 1
SELECT
dt2.val, dt2.next
FROM
(
SELECT
@nxt AS next,
@nxt := dt.inbp_ingangsdatum AS val
FROM
(
SELECT
ibp.inbp_ingangsdatum
FROM base AS ibp
ORDER BY ibp.inbp_ingangsdatum DESC
) AS dt
CROSS JOIN (SELECT @nxt := '') AS user_init_vars
) AS dt2
ORDER BY dt2.val;
Результат:
| val | next |
| -------- | -------- |
| 20090101 | 20120401 |
| 20120401 | 20120402 |
| 20120402 | 20120403 |
| 20120403 | 20120404 |
| 20120404 | 20120405 |
| 20120405 | |
Просмотр на БД Fiddle