选择前150行,然后选择下一行150,依此类推?

时间:2012-03-09 09:05:17

标签: sql oracle select rows

如何在表格中的oracle sql中选择前x行,然后是下一个x,依此类推?我知道我可以使用TOP / LIMIT,然后我得到第一个x

select a from b limit 150 =>获得前150行。

编辑:为什么?我想将前150个输出复制到一个文件中,然后将下一个150复制到另一个文件中等等......

6 个答案:

答案 0 :(得分:10)

LIMIT 150LIMIT 0,150:前150行

LIMIT 150,150:接下来的150行

LIMIT 300,150:接下来的150行

等等

答案 1 :(得分:9)

在Oracle中,你有一个很好的rownum:它是一个伪列。它对结果集中的记录进行编号。满足select语句中where标准的第一条记录将被赋予rownum=1,并且每个后续记录会议的相同条件会增加rownum

SELECT 
    a, b
FROM
    (SELECT rownum rn, a, b from table WHERE c=some_value ORDER BY some_column)
WHERE 
    rn BETWEEN 150 AND 300;

(感谢@Mark Ba​​nnister)

如果在子查询中嵌入ORDER BY子句并将ROWNUM条件放在顶级查询中,则可以在排序行之后强制应用ROWNUM条件。

答案 2 :(得分:3)

我假设您正在尝试分页,如果是这样,您可以这样做:

pageSize150

SELECT * FROM
(
    SELECT a.*, rownum r__
    FROM
    (
        SELECT * FROM tblName c
    ) a
    WHERE rownum < ((pageNumber * pageSize) + 1 )
)
WHERE r__ >= (((pageNumber-1) * pageSize) + 1)

答案 3 :(得分:0)

  1. 首先通过以下方式获取顶部选择行中最后一个元素的ID:
  2. (a)SQL查询如下:

    Select top 1 id from (SELECT TOP 150 * FROM (select top 150 * from outlet order by id asc)as d order by id desc) as b order by id asc
    
    1. 将选定的ID保存在ViewState的Session对象中,即LastOutletID

    2. 声明一个int PageSize = 150并添加到ViewState的Session对象

    3. (b)SqlQuery如下:

      从(选择TOP 150 * FROM(选择顶部PageSize *从出口,其中id&gt; LastOutletID order by id asc)中选择顶部150 *作为d order by id desc)作为b order by id asc

      1. 现在,如果您想要选择下一个顶行,请按照步骤1获取最后一个元素ID并保存,然后只需将150添加到PageSize将为您提供下一个151到300行

答案 4 :(得分:0)

SQL Server的解决方案: 1)在我的表格中获取总行数。

例如。从MYTABLE中选择count(1) - 500行

2)使用CTE为表格中的每一行分配逻辑行号。

3)使用行号间隔和BETWEEN子句选择行数。

WITH CTE AS (选择   ROW_NUMBER()OVER(按MyColumn1,MyColumn2,MyColumn3排序)AS Row#, 吨。* 来自MYTABLE t )

从CTE中选择*,其中Row#在150和300之间 按MyColumn1,MyColumn2,MyColumn3

排序

4)使用下一行编号间隔重复步骤2)和3),直到达到行总计数。

答案 5 :(得分:0)

从Oracle 12开始,您有FETCH和OFFSET。

对于您的示例,您希望将150行放入一个文件,将接下来的150行放入另一个文件中:

Spool file1.txt
select a from b
order by a
Fetch first 150 rows only;
Spool off
Spool file2.txt
select a from b
offset 150 rows
Fetch next 150 rows only;
spool off

link显示了Oracle 12.2文档中行限制子句的铁路轨迹图。

示例here中还包含“order by”,如果您正在寻找某些内容,那么这很有意义。

以前的Oracle版本需要使用rownum和order-by,如此处的其他答案所述。