SQL сортировать с ограничением? (нетривиально) - PullRequest
4 голосов
/ 26 мая 2009
table {
  id: long
  name: string
}

1235 Fred
1902 Trever
5123 George
6467 Derek
7868 Joe
8972 Bob
9272 Alf
9842 Hank

Я хочу вернуть 2 записи, предшествующие записи Джоса, в порядке по возрастанию .

Т.е. правильные значения должны быть:

5123 George
6467 Derek

Есть мысли? FYI:

  1. Возвращает неправильные строки:

    выбор * из таблицы с идентификатором <7868, порядок по идентификатору, ограничение по возрастанию 2 </p>

  2. Возвращает неправильный порядок сортировки:

    выбор * из таблицы с идентификатором <7868, порядок по пределу идентификатора ID 2 </p>

Ответы [ 3 ]

4 голосов
/ 26 мая 2009
SELECT * FROM
  (select * from table where id<7868 order by id desc limit 2) AS foo
ORDER BY ID ASC
1 голос
/ 26 мая 2009

Попробуйте:

Select * from (
    select * from table with id<7868 
    order by id desc limit 2
) as t order by id asc

Выполнение подзапроса позволяет сначала получить правильные строки, а затем изменить их порядок.

0 голосов
/ 26 мая 2009

В PostgreSQL:

select * from "table", где id <7868, порядок по id, ограничение по времени, смещение 2, 2 </p>

И аналогично в MySQL (я считаю) "предел 2, 2"

«LIMIT 2 OFFSET 2» работает и в SQLite, по крайней мере, с версией, которую я пробовал (3.6.13)

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