【问题标题】:How to add offset in a "select" query in Oracle 11g?如何在 Oracle 11g 的“选择”查询中添加偏移量?
【发布时间】:2015-01-21 20:16:59
【问题描述】:

如何在 Oracle 11g 的“选择”查询中添加偏移量。 我只知道如何添加限制,例如 rownum <= 5 这个问题不是重复的,我已经检查了其他问题并且与我的无关。

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

【问题讨论】:

标签: sql oracle oracle11g pagination rownum


【解决方案1】:

您可以通过指定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。

【讨论】:

  • @psaraj12,如果您的意思是按降序获取行,那么只需在inner query 中使用DESC
  • 如何用 LEFT OUTER JOIN 做到这一点?
  • @Toolkit 没关系。您可以将结果集作为内部查询并应用 TOP N 查询。
  • @LalitKumarB 谢谢,我现在正在尝试使用作为 JOIN 查询的物化视图来执行此操作。知道如何根据父表进行分页吗?谢谢
  • @Toolkit 应用于结果集。或者使用 WITH 子句让它看起来更简单
【解决方案2】:

您可以为此使用 ROW_NUMBER 函数。

也许这会有所帮助:

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

希望有帮助

【讨论】:

    【解决方案3】:

    在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 示例

    【讨论】:

    • 您只需要ROWNUM
    • @Lalit Kumar B. 只要涉及到限制输出中的行,您所写的内容就有意义。我想说这个问题并不完全清楚,应该重新措辞(偏移量可能有不同的理解)。
    【解决方案4】:

    对于 oracle 11g,假设你有一个表用户,你可以做的限制和偏移:

        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
    

    让我知道它是否适合你

    【讨论】:

      猜你喜欢
      • 2016-07-31
      • 2011-11-11
      • 2021-07-06
      • 2016-04-04
      • 1970-01-01
      • 1970-01-01
      • 2014-01-06
      • 1970-01-01
      • 2019-06-06
      相关资源
      最近更新 更多