sql - 如何获得表中的第n行,或者如何将表的子集分成大小相等的集合或行?

标签 sql oracle

我有一个由主键(ID)和类型标识符(TYPE_ID)标识的异构数据表。我希望能够执行一个查询,该查询返回给定类型的一组范围,该范围分为偶数页面大小。例如,如果有10,000个类型为'1'的记录,并且我将页面大小指定为1000,则我希望返回10对数字,这些数字代表我可以在后续查询中的BETWEEN子句中使用的值,以一次查询DB 1000记录。

我最初的尝试是这样的

select id, rownum from CONTENT_TABLE 
where type_id = ? and mod(rownum, ?) = 0

但这是行不通的。

最佳答案

在返回选定的记录后,“评估”了rownum评估选择查询的where clause。因此,您需要
在另一个查询的rownum上选择。我给r作为rownum的别名:

select id from (
  select 
    id, 
    rownum r
  from 
    CONTENT_TABLE 
   where type_id = ? 
)
where mod(r, ?) = 0

关于sql - 如何获得表中的第n行,或者如何将表的子集分成大小相等的集合或行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2694429/

相关文章:

java - Oracle Advanced Queue - 消耗率的性能问题

java - 如何在 Play java 中创建数据库线程池并使用此池进行数据库查询

sql - bool 给出无效数据类型 - Oracle

c# - SqlDataReader 和网络延迟

php - 尝试使用特定表中的 ID 列出数据

database - Oracle 11g 损坏的物化 View : Stop refresh without dropping view or refreshing view?

linux - 从 root 运行一个脚本,它调用 sudo oracle 中的另一个脚本。如何在不询问 oracle 密码的情况下做到这一点

mysql - 导入sql文件时出错

sql - 删除前Postgres触发器检查数量

mysql - 从 mySQL 数据库中删除列重复的重复行