Это будет эмулировать аналитическую функцию LEAD()
(т.е. выбрать следующее значение для каждой строки в таблице)
SELECT mo.id, mo.date,
mi.id AS next_id, mi.date AS next_date
FROM (
SELECT mn.id, mn.date,
(
SELECT id
FROM mytable mp
WHERE (mp.date, mp.id) > (mn.date, mn.id)
ORDER BY
mp.date, mp.id
LIMIT 1
) AS nid
FROM mytable mn
ORDER BY
date
) mo,
mytable mi
WHERE mi.id = mo.nid
Если вы просто хотите выбрать следующую строку для данного идентификатора, вы можете использовать:
SELECT *
FROM mytable
WHERE (date, id) >
(
SELECT date, id
FROM mytable
WHERE id = @myid
)
ORDER BY
date, id
LIMIT 1
Это будет работать наиболее эффективно, если у вас есть индекс на (date, id)