如何在Oracle 11g中的“选择”查询中添加偏移量?

r3i60tvu  于 2023-03-22  发布在  Oracle
关注(0)|答案(5)|浏览(182)

如何在Oracle 11g中的“选择”查询中添加偏移量。我只知道如何通过例如rownum <= 5添加限制。此问题不重复,我已经检查了其他问题,与我的问题无关。
那么,如何在Oracle 11g中添加偏移量呢?

xggvc2p6

xggvc2p61#

您可以通过指定OFFSET12c上轻松地完成此操作。
12c中,

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

要在11g和之前的版本上执行相同的操作,需要使用ROWNUM两次,分别是inner queryouter 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。

k75qkfdt

k75qkfdt2#

你可以使用ROW_NUMBER函数来实现。
也许这会有所帮助:

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

希望能有所帮助

fykwrbwg

fykwrbwg3#

对于oracle 11g,假设你有一个表用户,对于limit和offset你可以做:

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

告诉我是否对你有效

dpiehjr4

dpiehjr44#

在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以获取示例

ssm49v7z

ssm49v7z5#

对于Oracle 11g中的分页,我们可以使用ROWNUM
这是一个例子。

WITH STUDENT_PAGINATION AS (
    SELECT
        STUDENT.*,
        ROWNUM AS RN
    FROM
        STUDENT
    ORDER BY
        ID
)
SELECT
    *
FROM
    STUDENT_PAGINATION
WHERE
    RN >=5
    AND RN <=10;

相关问题