SQL дать X записей после указанной записи - PullRequest
1 голос
/ 17 марта 2011

Можно ли написать оператор SQL, который извлекает X последовательных записей после записи с критериями Y из списка с критериями Z?

например, учитывая эту таблицу:

id  name
------------------------------
1   aaa
5   bbb
10  ccc
15  ddd
20  eee
25  fff
30  ggg

Сначала я применяю критерии Z, что-то вроде

SELECT * WHERE (id>4) AND (id<26) ORDER BY id ASC

тогда у меня остается список:

id  name
------------------------------
5   bbb
10  ccc
15  ddd
20  eee
25  fff

Я хочу знать, возможно ли извлечь 2 записи из этого списка, откуда name = 'ddd' (или некоторые другие критерии Y), т. Е. Чтобы вернуть записи "ddd" и "eee" в приведенном выше примере.

Должно быть возможно сделать это напрямую в SQL, но, боюсь, мне не хватает пробега, чтобы это понять.

Ответы [ 3 ]

2 голосов
/ 17 марта 2011
SELECT * 
FROM yourTable
WHERE id > 4 
  AND id < 26 
  AND id >= ( SELECT min(id) 
              FROM yourTable
              WHERE id > 4 
                AND id < 26 
                AND name = 'ddd'
            ) 
ORDER BY id 
LIMIT 2
;

В вашей редакции:

SELECT * 
FROM yourTable
WHERE ( criterionZ )
  AND sortingField >=
            ( SELECT min(sortingField ) 
              FROM yourTable
              WHERE ( criterionZ )
                AND ( criterionY )
            ) 
ORDER BY sortingField
LIMIT X
;
1 голос
/ 17 марта 2011

Предполагая, что ваши идентификационные номера последовательны, вы можете использовать подзапрос:

SELECT * FROM  table WHERE id >= (SELECT id FROM table WHERE name =  'ddd' LIMIT 1) LIMIT 2
1 голос
/ 17 марта 2011

Добавить предельную оговорку

SELECT * WHERE (id>4) AND (id<26) ORDER BY id ASC limit 2,2

редактировать.

select * from table where id > (
select id from table where name = 'eee' ) 
order by id
limit 2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...