如何解决如何在 ORACLE SQL 中打印前三行和后三行?
在 ORACLE sql 中,我想打印前两行和后两行。我怎样才能用一个查询来做到这一点?假设您有十行的表。我想打印前两行和后两行,如下所示:
行号 | 价值观 |
---|---|
1 | A |
2 | B |
9 | C |
10 | D |
解决方法
您可以使用 row_number()over(order by row_number) 窗口函数来实现您想要的。如果你愿意,即使你可以让前两行按 row_number 排序,最后两行按列值排序 (row_number()over(order by row_number)FirstRowNumber,row_number()over(order by valuess desc)LastRowNumber ))。
表结构和插入语句:
create table tableName (Row_Number int,Valuess varchar(20));
insert into tablename values(1,'A');
insert into tablename values(2,'B');
insert into tablename values(9,'C');
insert into tablename values(10,'D');
insert into tablename values(11,'E');
insert into tablename values(12,'F');
查询:
SELECT ROW_NUMBER,Valuess FROM (
select ROW_NUMBER,Valuess,row_number()over(order by row_number)FirstRowNumber,row_number()over(order by row_number desc)LastRowNumber from tablename ) T
WHERE FIRSTROWNUMBER<=2 OR LASTROWNUMBER<=2
ORDER BY FIRSTROWNUMBER
输出:
ROW_NUMBER | 价值 |
---|---|
1 | A |
2 | B |
11 | E |
12 | F |
我认为您需要以下查询,
select t.*
from (select table1.*,row_number() over (order by [Row Number]) as seqnum,count(*) over () as cnt
from table1
) t
where seqnum in( 1,2) or seqnum in( cnt,cnt-1);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。