在Oracle中的SQL查询中获取固定数量的行[重复]。

问题描述 投票:0回答:3

请帮助我在Oracle数据库中写一个SQL查询。有一个表叫tbl,它有12行。我想选择前4行,然后下4行和最后4行。

任何人都可以告诉我如何能做到这一点在Informix。

sql oracle informix
3个回答
1
投票

你可以使用 rownum:

select * from (select t.*, rownum rn from tbl t) where rn between 1 and 4;
/
select * from (select t.*, rownum rn from tbl t) where rn between 5 and 8;
/
select * from (select t.*, rownum rn from tbl t) where rn between 9 and 12;
/

如果你使用的是 order by 然后使用 row_number() (文件)

select * from (select t.*, row_number() over (order by column_name) rn from tbl t) where rn between 1 and 4;
/
select * from (select t.*, row_number() over (order by column_name) rn from tbl t) where rn between 5 and 8;
/
select * from (select t.*, row_number() over (order by column_name) rn from tbl t) where rn between 9 and 12;
/

2
投票

EDIT:现在应该用3级选择来解决。

select * from (
  select q1.*, rownum as rn from (   --get correct rownum 
      select * from tbl order by column --get correct order
  ) q1
) q2
 where q2.rn between 1 and 4; -- filter

第一部分,第二和第三部分:

对于第二和第三部分。

 where q2.rn between 5 and 8
 where q2.rn between 9 and 12

2
投票

没有什么叫做第一行,最后一行,"n "行,除非你明确指定一个ORDER BY,然后选择所需的行。

顶部-n行限制 特点 Oracle 12c 在病房。

SQL> select * from order_test order by val;

       VAL
----------
         1
         1
         2
         2
         3
         3
         4
         4
         5
         5
         6
         6
         7
         7
         8
         8
         9
         9
        10
        10

20 rows selected.

前4行 。

SQL> SELECT val
  2  FROM   order_test
  3  ORDER BY VAL
  4  FETCH FIRST 4 ROWS ONLY;

       VAL
----------
         1
         1
         2
         2

下4行(看OFFSET) :

SQL> SELECT val
  2  FROM   order_test
  3  ORDER BY VAL
  4  OFFSET 4 ROWS FETCH NEXT 4 ROWS ONLY;

       VAL
----------
         3
         3
         4
         4

最后,下4行与OFFSET 8行 。

SQL> SELECT val
  2  FROM   order_test
  3  ORDER BY VAL
  4  OFFSET 8 ROWS FETCH NEXT 4 ROWS ONLY;

       VAL
----------
         5
         5
         6
         6
© www.soinside.com 2019 - 2024. All rights reserved.