2014-11-24 85 views
7

如何在Oracle 11g的「select」查詢中添加偏移量。 我只知道如何添加限制,例如rownum <= 5 這個問題不是重複的,我已經檢查了其他問題,並且與我的無關。如何在Oracle 11g的「select」查詢中添加偏移量?

那麼,如何在Oracle 11g中添加偏移量?

+2

http://use-the-index-luke.com/sql/partial-results – 2014-11-24 08:29:18

+0

問題應改寫爲你的意思偏移量可能會或可能不會與OFFSET子句相關。 – 2017-06-22 05:24:23

回答

13

您可以通過指定OFFSET輕鬆地做到這一點上12c

12c

SELECT val 
FROM table 
ORDER BY val 
OFFSET 4 ROWS FETCH NEXT 4 ROWS ONLY; 

爲了做同樣的11g和之前,你需要分別兩次inner queryouter query使用ROWNUM

同樣的查詢在11g

SELECT val 
FROM (SELECT val, rownum AS rnum 
     FROM (SELECT val 
       FROM table 
       ORDER BY val) 
     WHERE rownum <= 8) 
WHERE rnum > 4; 

這裏OFFSET是4

+0

你可以包含一個負偏移的例子嗎? – psaraj12 2014-11-24 12:58:18

+1

這一個工作....非常感謝 – sasori 2014-11-24 15:10:25

+1

@ psaraj12,如果你的意思是按降序獲得行,那麼只需在內部查詢中使用DESC。 – 2014-11-24 15:19:26

0

使用功能LAG或鉛在Oracle

The LAG function is used to access data from a previous row 

The LEAD function is used to return data from the next row 

用法: -

LAG (value_expression [,offset] [,default]) OVER ([query_partition_clause] order_by_clause) 
LEAD (value_expression [,offset] [,default]) OVER ([query_partition_clause] order_by_clause) 

請找到this link的例子

+0

所有你需要的是'ROWNUM' – 2014-11-24 07:09:04

+0

@Lalit Kumar B.只要限制ouptut中的行,你寫的內容是有意義的。我會說這個問題並不完全清楚,應該重新編寫(抵消可能會有不同的理解)。 – 2017-06-22 05:27:17

1

您可以使用ROW_NUMBER函數,該函數。

也許這會有所幫助:

SELECT * 
    FROM(SELECT t.*, 
       ROW_NUMBER() OVER (ORDER BY ...) rn -- whatever ordering you want 
     FROM your_table t 
    ) 
WHERE rn >= ... -- your offset 

希望幫助