cod*_*441 31 sql database oracle rownum
如何返回特定范围的ROWNUM
值?
我正在尝试以下方法:
select * from maps006 where rownum >49 and rownum <101
Run Code Online (Sandbox Code Playgroud)
这仅返回与<
运算符匹配的行.
Mic*_*sov 61
SELECT * from
(
select m.*, rownum r
from maps006 m
)
where r > 49 and r < 101
Run Code Online (Sandbox Code Playgroud)
Qua*_*noi 30
SELECT *
FROM (
SELECT q.*, rownum rn
FROM (
SELECT *
FROM maps006
ORDER BY
id
) q
)
WHERE rn BETWEEN 50 AND 100
Run Code Online (Sandbox Code Playgroud)
请注意双嵌套视图.ROWNUM
之前进行过评估ORDER BY
,因此需要正确的编号.
如果省略ORDER BY
子句,则不会获得一致的顺序.
Lal*_*r B 13
我知道这是一个老问题,但是,更何况它是有用的新功能的最新版本.
从Oracle 12c开始,您可以使用新的Top-n Row限制功能.无需编写子查询,也不需要依赖ROWNUM.
例如,以下查询将按升序将员工退回到第4高到第7高薪之间:
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>
Run Code Online (Sandbox Code Playgroud)
小智 6
我一直在寻找解决方案,发现这篇很棒的 文章解释了解决方案 相关摘录
我最喜欢的ROWNUM使用是分页。在这种情况下,我使用ROWNUM来获取结果集的第N到M行。一般形式如下:
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;
Run Code Online (Sandbox Code Playgroud)
现在有一个真实的示例(获取行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;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
144766 次 |
最近记录: |