Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL ROWNUM如何返回特定范围之间的行_Sql_Database_Oracle_Rownum - Fatal编程技术网

SQL ROWNUM如何返回特定范围之间的行

SQL ROWNUM如何返回特定范围之间的行,sql,database,oracle,rownum,Sql,Database,Oracle,Rownum,如何返回特定范围的ROWNUM值 我正在尝试以下方法: select * from maps006 where rownum >49 and rownum <101 这将仅返回与 请注意双嵌套视图。ROWNUM是在ORDER BY之前计算的,因此正确的编号需要ROWNUM 如果省略ORDERBY子句,将无法获得一致的顺序。也可以使用CTE with子句 WITH maps AS (Select ROW_NUMBER() OVER (ORDER BY Id) AS rownum,*

如何返回特定范围的ROWNUM值

我正在尝试以下方法:

select * from maps006 where rownum >49 and rownum <101
这将仅返回与 请注意双嵌套视图。ROWNUM是在ORDER BY之前计算的,因此正确的编号需要ROWNUM


如果省略ORDERBY子句,将无法获得一致的顺序。

也可以使用CTE with子句

WITH maps AS (Select ROW_NUMBER() OVER (ORDER BY Id) AS rownum,* 
from maps006 )

SELECT rownum, * FROM maps  WHERE rownum >49 and rownum <101  

我正在寻找一个解决方案,发现这个很好 相关摘录

我一直最喜欢使用ROWNUM的是分页。在这种情况下,我使用 ROWNUM获取结果集的第N行到第M行。一般形式如下: 如下:

现在,通过一个真实的示例获得第148、149和150行:

select *
    from
  (select a.*, rownum rnum
     from
  (select id, data
     from t
   order by id, rowid) a
   where rownum <= 150
  )
   where rnum >= 148;

我知道这是一个老问题,但是,在最新版本中提及新功能是有用的

从Oracle 12c开始,您可以使用新的Top-n行限制功能。不需要编写子查询,也不依赖于ROWNUM

例如,下面的查询将按升序返回第四高到第七高工资之间的员工:

SQL> SELECT empno, sal
  2  FROM   emp
  3  ORDER BY sal
  4  OFFSET 4 ROWS FETCH NEXT 4 ROWS ONLY;

     EMPNO        SAL
---------- ----------
      7654       1250
      7934       1300
      7844       1500
      7499       1600

SQL>

为了完整起见,有没有办法删除后面的r列?我的快速修复方法是将第一行更改为:选择col1,col2,col3,其中col1,col2 etc将是所有列的名称,但rthis在oracle上不起作用,如果不给ROWNUM别名,如何选择结果集中没有ROWNUM的所有行?我使用此模式在oracle中得到不一致的结果。下面的双嵌套查询解决了这个问题。当我尝试类似的东西时,我得到了ORA-00904:RN:无效的标识符。@RobinGreen:请提出另一个问题,并在那里发布类似的东西。我仍然不明白为什么需要双嵌套。我正在尝试使用一些数据,它给了我一致的记录。从select tab.*中选择*,从table1 tab中选择rownum r按cft排序。confrm\u fraud\u id tab1,其中tab1.r介于10和20@pramod:这是因为您的查询按照confrm\u fraud\u id的顺序读取记录,很可能是使用索引。你不能依赖这种行为。比较这两个查询:不正确和正确。请注意,在不正确的查询中,ROWNUM甚至以错误的顺序出现。这个解决方案对我来说非常有效。我试图使用介于11和20之间的ROWNUM对一个包含12行的结果集进行分页,但是对于任何开始大于1的范围,都会得到0条记录。谢谢你的提示!看见
WITH maps AS (Select ROW_NUMBER() OVER (ORDER BY Id) AS rownum,* 
from maps006 )

SELECT rownum, * FROM maps  WHERE rownum >49 and rownum <101  
select * 
from emp 
where rownum <= &upperlimit 
minus 
select * 
from emp 
where rownum <= &lower limit ;
select * enter code here
  from ( select /*+ FIRST_ROWS(n) */ 
  a.*, ROWNUM rnum 
      from ( your_query_goes_here, 
      with order by ) a 
      where ROWNUM <= 
      :MAX_ROW_TO_FETCH ) 
where rnum  >= :MIN_ROW_TO_FETCH;
select *
    from
  (select a.*, rownum rnum
     from
  (select id, data
     from t
   order by id, rowid) a
   where rownum <= 150
  )
   where rnum >= 148;
SQL> SELECT empno, sal
  2  FROM   emp
  3  ORDER BY sal
  4  OFFSET 4 ROWS FETCH NEXT 4 ROWS ONLY;

     EMPNO        SAL
---------- ----------
      7654       1250
      7934       1300
      7844       1500
      7499       1600

SQL>