如何在Oracle 11g的“select”查询中添加偏移量。
我只知道如何通过rownum <= 5
添加限制
这个问题不重复,我已经检查了其他问题,与我的问题无关。
那么,如何在Oracle 11g中添加偏移量?
答案 0 :(得分:20)
您可以通过指定12c
在OFFSET
上轻松完成。
在12c
,
SELECT val
FROM table
ORDER BY val
OFFSET 4 ROWS FETCH NEXT 4 ROWS ONLY;
要在11g
及之前做同样的事情,您需要分别使用ROWNUM
两次,inner query
和outer query
。
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.
答案 1 :(得分: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
希望有所帮助
答案 2 :(得分:0)
在oracle中使用LAG或LEAD功能
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示例