SQL-запрос для выбора записи «Далее» (аналогично первому или верхнему N) - PullRequest
4 голосов
/ 07 октября 2011

Мне нужно сделать запрос, чтобы вернуть следующую (или предыдущую) запись, если определенная запись отсутствует. Например, рассмотрим следующую таблицу:

ID (primary key)    value
1                    John
3                    Bob
9                    Mike
10                   Tom.

Я бы хотел запросить запись с идентификатором 7 или более, если 7 не присутствует.

Мои вопросы,

  1. Возможны ли эти типы запросов в SQL?
  2. Как называются такие запросы в мире БД?

Спасибо!

Ответы [ 4 ]

16 голосов
/ 07 октября 2011

Да, это возможно, но реализация будет зависеть от вашей СУБД.

Вот как это выглядит в MySQL, PostgreSQL и SQLite:

select ID, value
from YourTable
where id >= 7
order by id
limit 1

В MS SQL-Server, Sybaseи MS-Access:

select top 1 ID, value
from YourTable
where id >= 7
order by id

В Oracle:

select * from (
    select ID, value
    from YourTable
    where id >= 7 
    order by id
)
where rownum = 1

В Firebird и Informix:

select first 1 ID, value
from YourTable
where id >= 7
order by id

В DB / 2 (этот синтаксис используется в SQL-2008):

select id, value
from YourTable
where id >= 7
order by id
fetch first 1 rows only

В тех СУБД, которые имеют «оконные» функции (в стандарте SQL-2003):

select ID, Value
from (
  select 
    ROW_NUMBER() OVER (ORDER BY id) as rownumber,
    Id, Value
  from YourTable
  where id >= 7
) as tmp                  --- remove the "as" for Oracle
where rownumber = 1

И если вы не уверены, какая СУБД у вас есть:

select ID, value
from YourTable
where id = 
      ( select min(id)
        from YourTable
        where id >= 7
      )
1 голос
/ 07 октября 2011

Я бы просто сделал это так:

select top 1 * from myTable where id >=7
order by id

реализация части top 1 - это T-SQL (MSSQL / Sybase), другие реализации различаются, но это всегда возможно (mysql / postgre *)1005 *, оракул rownum = 1)

1 голос
/ 07 октября 2011

Попробуйте это для MS-SQL:

SELECT TOP 1 
id, value 
FROM your_table
WHERE id >= 7
ORDER BY id

или для MySql

SELECT id, value 
FROM your_table
WHERE id >= 7
ORDER BY id
LIMIT 0,1
0 голосов
/ 07 октября 2011
select top 1 * from Persons where Id >= @Id order by Id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...