请帮助我在Oracle数据库中写一个SQL查询。有一个表叫tbl,它有12行。我想选择前4行,然后下4行和最后4行。
任何人都可以告诉我如何能做到这一点在Informix。
你可以使用 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;
/
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
没有什么叫做第一行,最后一行,"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