Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.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 如何获取表中的每N行,或者如何将表的子集拆分为大小相同的集合或行?_Sql_Oracle - Fatal编程技术网

Sql 如何获取表中的每N行,或者如何将表的子集拆分为大小相同的集合或行?

Sql 如何获取表中的每N行,或者如何将表的子集拆分为大小相同的集合或行?,sql,oracle,Sql,Oracle,我有一个由主键(ID)和类型标识符(type_ID)标识的异构数据块表。我希望能够执行一个查询,返回给定类型的一组范围,这些范围被分成偶数页大小。例如,如果有10000条类型为“1”的记录,并且我指定的页面大小为1000,那么我希望返回10对数字,表示我可以在后续查询中在BETWEEN子句中使用的值,以便一次查询DB 1000条记录 我最初的尝试是这样的 select id, rownum from CONTENT_TABLE where type_id = ? and mod(rownum,

我有一个由主键(ID)和类型标识符(type_ID)标识的异构数据块表。我希望能够执行一个查询,返回给定类型的一组范围,这些范围被分成偶数页大小。例如,如果有10000条类型为“1”的记录,并且我指定的页面大小为1000,那么我希望返回10对数字,表示我可以在后续查询中在
BETWEEN
子句中使用的值,以便一次查询DB 1000条记录

我最初的尝试是这样的

select id, rownum from CONTENT_TABLE 
where type_id = ? and mod(rownum, ?) = 0
但这不起作用

rownum
在返回所选记录时,在 评估select查询的
where子句
。因此,你需要 在另一个查询中选择on rownum。我将r作为rownum的别名:

select id from (
  select 
    id, 
    rownum r
  from 
    CONTENT_TABLE 
   where type_id = ? 
)
where mod(r, ?) = 0
你看过安提尔吗?

Hi使用下面的SQL查找表中的每N行:

SQL查询:

SELECT * 
FROM table_name
WHERE (ROWID,0) in (SELECT ROWID, MOD(ROWNUM, n)
FROM table_name);
Replace n with 2, 3, 4 , 5 ... 

谢谢我在这里发现了大致相同的信息:如果你想将一个结果集细分为大小相等的结果集,那么NTILE()是一个更好的选择。但我认为总有改进的余地。起初,我提出了不同的解决方案,正如你们所看到的,它不是重复的。第二,最终用户也应该有做出决定的自由:)不过,谢谢你的反馈。