如何在Oracle Sql中返回20到30之间的行

时间:2018-06-04 15:11:31

标签: sql oracle filter subset rows

所以我有一个我要输出的大表,但是,我只想看到20到30之间的行。

我试过

select col1, col2
from table
where rownum<= 30 and rownum>= 20;

但是sql发出错误

我也试过 - 在20到30之间的rownum 它也没用。

那么最好的办法是什么?

2 个答案:

答案 0 :(得分:1)

UIApplication.shared.openURL(URL(string: "message://%3c4AFF4992-565C-4AE3-AD5E-0D3717B18305@icloud.com%3e")!)

这仅显示第21行到第30行。请注意您需要对数据进行排序,否则每次都会得到不同的结果。

另见文档中的here

附录:如同显示的可能重复链接一样,这里的问题是,如果没有第19行,那么就不会有第20行。这就是为什么SELECT * FROM T ORDER BY I OFFSET 20 ROWS --skips 20 rows FETCH NEXT 10 ROWS ONLY --takes 10 rows - 方法可以采取的行为只有前x个记录,但是当您需要跳过记录时,您需要通过选择子查询中的rownum或使用rownum

来解决方法

使用rownum的方法示例(适用于较低的oracle版本或其他):

offset ... fetch

答案 1 :(得分:0)

每当使用rownum时,它会计算查询返回的行数。因此,如果您尝试通过选择rownum 20和30之间的所有记录进行过滤,那么只有10行,所以20和30不存在。但是,您可以使用WITH(无论您想要命名),然后包装您的查询并重命名您的rownum列。这样您就可以从选择中进行选择。例。

    with T as (
            select requestor, request_id, program, rownum as "ROW_NUM" 
            from fnd_conc_req_summary_v where recalc_parameters='N')
select * from T where row_num between 20 and 30;