Sql 如何获取表中的每N行,或者如何将表的子集拆分为大小相同的集合或行?
我有一个由主键(ID)和类型标识符(type_ID)标识的异构数据块表。我希望能够执行一个查询,返回给定类型的一组范围,这些范围被分成偶数页大小。例如,如果有10000条类型为“1”的记录,并且我指定的页面大小为1000,那么我希望返回10对数字,表示我可以在后续查询中在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,
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()是一个更好的选择。但我认为总有改进的余地。起初,我提出了不同的解决方案,正如你们所看到的,它不是重复的。第二,最终用户也应该有做出决定的自由:)不过,谢谢你的反馈。