2011-10-06 54 views
4

如果某個記錄不存在,我需要執行查詢以返回下一個(或前一個)記錄。例如,考慮下表:SQL查詢選擇'下一個'記錄(類似於第一個或前N)

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

我想查詢ID爲7或更大,如果7不存在的記錄。

我的問題是,

  1. 難道這些類型的查詢可能與SQL?
  2. 什麼是DB世界中調用的這種查詢?

謝謝!

+0

你的意思是查詢只'9返回Mike',如果你搜索'7'? –

回答

16

是的,這是可能的,但實施將取決於你的RDBMS。

下面是它看起來像在MySQL,PostgreSQL和SQLite的:

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

在MS SQL-Server中,Sybase和MS-訪問:

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 

在那些具有 「窗口」 的功能RDBMS(在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 

和RDBMS,如果你不知道你有:

select ID, value 
from YourTable 
where id = 
     (select min(id) 
     from YourTable 
     where id >= 7 
    ) 
+1

+1以提高清晰度。 – Random

+1

+1! –

+2

+1,因爲它確實完整! – Marco

1

嘗試此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
select top 1 * from Persons where Id >= @Id order by Id 
1

我只想做這樣的:

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

實施top 1部分的是T-SQL(MSSQL /的Sybase),其他實現有所不同,但它始終是可能的(MySQL的/ postgre LIMIT 1,甲骨文rownum = 1

相關問題