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

时间:2010-04-22 20:57:33

标签: 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

但这不起作用。

3 个答案:

答案 0 :(得分:4)

答案 1 :(得分:3)

在返回所选记录之后,

rownum被“评估” 评估选择查询的where clause。因此,你需要 在另一个查询中选择rownum。我将r作为rownum的别名:

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

答案 2 :(得分:-1)

您可以在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 ...