выбирая последующие записи произвольно с лимитом - PullRequest
0 голосов
/ 12 марта 2009

Я хочу сделать запрос, чтобы получить запись сразу после записи для любой данной записи в результирующем наборе, упорядоченном по списку. Я не понимаю, как использовать ключевое слово limit в синтаксисе SQL для этого.

Я могу использовать WHERE primarykey = число, но как ограничение результата поможет, когда у меня будет только один результат?

Как получить следующую запись с произвольным номером первичного ключа?

У меня есть произвольный первичный ключ, и я хочу выбрать следующий, упорядоченный по дате.

Ответы [ 3 ]

2 голосов
/ 12 марта 2009

Это будет эмулировать аналитическую функцию 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)

1 голос
/ 12 марта 2009

Как насчет этого, если вы ищете тот, что после 34

SELECT * FROM mytable WHERE primaryKey > 34 ORDER BY primaryKey LIMIT 1
0 голосов
/ 12 марта 2009

Может быть так просто, как:

select *
from mytable
where datecolumn > (select datecolumn from mytable where id = @id)
order by datecolumn
limit 1

(отредактировано после комментариев)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...