【问题标题】:Fetching a range of rows in Oracle [duplicate]在Oracle中获取一系列行[重复]
【发布时间】:2017-04-12 18:52:22
【问题描述】:

我试图在 Oracle 中获取一系列行,但我只能从第一行获取到行号 N。

如果我想获取表之间的范围(例如行号),我将无法执行此操作。 2到5

让我们考虑下面示例用户 SCOTT 中的 EMP 表

案例 1:获取从 1 到 5 的一系列行,我得到以下结果

select EMPNO, ENAME from (select EMPNO,ENAME from EMP ORDER BY EMPNO)  WHERE ROWNUM BETWEEN 1 AND 5

案例 2:现在让我们尝试获取 2 到 5 之间的 3 行。

select EMPNO, ENAME from (select EMPNO,ENAME from EMP ORDER BY EMPNO)  WHERE ROWNUM BETWEEN 2 AND 5

这给了我一个空的结果集。这是为什么?我需要更改哪些内容才能从表之间的某处获取一系列行?

【问题讨论】:

  • 同上,另外你可以阅读this

标签: java database oracle jdbc


【解决方案1】:

您可以使用RANK函数查找每个empno的排名,然后过滤掉2到5的记录。

SELECT *
  FROM (SELECT empno, ename, RANK () OVER (ORDER BY empno) RNK FROM emp)
 WHERE RNK BETWEEN 2 AND 5;

【讨论】:

    【解决方案2】:
    select * FROM (SELECT 
       ROW_NUMBER() OVER (ORDER BY EMPNO ) AS ROWID, 
       ENAME
     FROM EMP ) EMP where ROWID between 2 and 5
    

    【讨论】:

      猜你喜欢
      • 2021-11-05
      • 1970-01-01
      • 2019-03-20
      • 2020-04-24
      • 2020-01-20
      • 2015-10-02
      • 2021-02-03
      • 1970-01-01
      • 2020-10-15
      相关资源
      最近更新 更多