2013-02-11 144 views

回答

15

ANSI/ISO SQL:2003年推出窗口功能

SELECT * FROM (
    SELECT 
    ROW_NUMBER() OVER (ORDER BY age ASC) AS rownum, 
    person_id, 
    person_name, 
    age 
    FROM person 
) AS foo 
WHERE rownum <= 3 

的Microsoft SQL Server已經支持這個語法,因爲SQL Server 2005的 http://msdn.microsoft.com/en-us/library/ms189798(v=sql.90).aspx

ANSI/ISO SQL:2008年推出了一款簡單語法爲FETCH FIRST,可能更類似於Microsoft/Sybase TOP語法:

SELECT person_id, person_name, age FROM person 
FETCH FIRST 3 ROWS ONLY 

Microsoft尚不支持此語法。又見http://en.wikipedia.org/wiki/Select_(SQL)#Limiting_result_rows

如果你還在使用Microsoft SQL Server 2000,你應該讀一個問題,我發佈了前陣子關於做「尋呼」樣式的查詢: Emulate MySQL LIMIT clause in Microsoft SQL Server 2000

+3

我甚至不知道ROW_NUMBER() OVER是ANSI SQL? – Andrew 2013-02-11 00:41:19