如何在Oracle 11g的"select"查询中添加偏移量。
我只知道如何通过例如
rownum <= 5
来添加限制。
这个问题不是重复的,我已经检查过其他问题,并与我的问题无关。
那么,在Oracle 11g中如何添加偏移量呢?rownum <= 5
来添加限制。
这个问题不是重复的,我已经检查过其他问题,并与我的问题无关。
那么,在Oracle 11g中如何添加偏移量呢?通过在 12c
中指定 OFFSET
,您可以轻松地完成此操作。
在 12c
中,
SELECT val
FROM table
ORDER BY val
OFFSET 4 ROWS FETCH NEXT 4 ROWS ONLY;
在 11g
和之前的版本中,为了实现相同的功能,您需要分别在 内部查询
和 外部查询
中使用两次 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。
SELECT *
FROM(SELECT t.*,
ROW_NUMBER() OVER (ORDER BY ...) rn -- whatever ordering you want
FROM your_table t
)
WHERE rn >= ... -- your offset
对于 Oracle 11g,假设您有一个名为 user 的表格,您可以使用以下方式进行限制和偏移量:
SELECT * FROM (
SELECT USER.*,
row_number() over (partition by 1 order by 1) as rnum
from USER
)
where rnum <= 100 --limit
and rnum > 0 --offset
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)
请点击 这个链接 查看示例
ROWNUM
。 - Lalit Kumar BROWNUM
。以下是示例。WITH STUDENT_PAGINATION AS (
SELECT
STUDENT.*,
ROWNUM AS RN
FROM
STUDENT
ORDER BY
ID
)
SELECT
*
FROM
STUDENT_PAGINATION
WHERE
RN >=5
AND RN <=10;
根据@Ibrahima Timera的回答,但是具有类似Postgres的LIMIT和OFFSET的行为,具体如下:
在下面的示例中,对于一个USER表,LIMIT为10,OFFSET为50:
SELECT * FROM (
SELECT USER.*,
row_number() over (partition by 1 order by 1) as rnum
from USER
)
where rnum <= (10 + 50) -- LIMIT + OFFSET
and rnum > 50 -- OFFSET