【问题标题】:Oracle "LIMIT n,m" equivalent [duplicate]Oracle“LIMIT n,m”等价物[重复]
【发布时间】:2011-08-09 18:52:48
【问题描述】:

可能重复:
How do I limit the number of rows returned by an oracle query?

我有这个问题

select * from pr_device_reading order by date_reading DESC

注意这个查询是规范化的,由方法构造,表名会根据方法的参数而改变,所以我不能指定列名(我确实想要所有的结果中的列)。

相当于什么

SELECT * 
 FROM pr_lecture_combustibles 
ORDER BY date_lecture DESC 
LIMIT 10,20;

使用 Oracle SQL?

我试过了

SELECT * 
  FROM (SELECT * 
          FROM pr_lecture_combustibles 
         ORDER BY date_lecture DESC) 
 WHERE ROWNUM BETWEEN 10 AND 20;

和other syntax,但我没有得到任何结果、“缺少表达式”消息和其他错误。

谢谢

【问题讨论】:

  • 抱歉,我在快速搜索中没有找到该问题
  • 我相信你需要给派生表一个别名。 FROM (....) AS A.
  • 在 Oracle 12c 中使用 FETCH:stackoverflow.com/a/18972336/290182
  • 这是一个有效的搜索。这是关于 limit 子句的替代,它的作用远不止限制行。
  • 适用于 Oracle 12c R1 及更高版本的答案:stackoverflow.com/a/26051830/1461424

标签: mysql sql oracle


【解决方案1】:

如果您可以接受为行号获取额外的列,则可以应用 ROW_NUMBER 分析函数并执行类似的操作

SELECT *
  FROM (SELECT a.*,
               ROW_NUMBER() OVER( order by date_lecture desc ) rn
          FROM pr_lecture_combustibles a)
 WHERE rn BETWEEN 10 AND 20

但是你会得到表中的所有列加上RN列

【讨论】:

    猜你喜欢
    • 2012-05-10
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    • 2010-12-06
    • 2012-03-26
    • 2013-11-04
    • 2011-09-12
    相关资源
    最近更新 更多