Oralce的示例:
1. 最佳选择:利用分析函数
row_number() over ( partition by col1 order by col2 ) 比如想取出100-150条记录,按照tname排序 select tname,tabtype from ( select tname,tabtype,row_number() over ( order by tname ) rn from tab ) where rn between 100 and 150; |
2. 使用rownum 虚列
select tname,tabtype from ( select tname,tabtype,rownum rn from tab where rownum <= 150 ) where rn >= 100; |
注释:使用序列时不能基于整个记录集合来进行排序,假如指定了order by子句,排序的的是选出来的记录集的排序。
create table mynumber(id int,name varchar(10)); insert into mynumber values(1,'no1'); insert into mynumber values(2,'no2'); insert into mynumber values(3,'no3'); insert into mynumber values(4,'no4'); insert into mynumber values(5,'no5'); insert into mynumber values(5,'no6'); insert into mynumber values(6,'no7'); insert into mynumber values(7,'no8'); insert into mynumber values(8,'no9'); insert into mynumber values(9,'no10'); insert into mynumber values(9,'no11'); insert into mynumber values(9,'no12'); insert into mynumber values(10,'no13'); insert into mynumber values(10,'no14'); insert into mynumber values(10,'no15'); insert into mynumber values(11,'no16'); insert into mynumber values(12,'no17'); insert into mynumber values(13,'no18'); |
select id,name,RANK() over ( order by id ) case1, DENSE_RANK() over ( order by id ) case2, row_number() over ( order by id ) case3 from mynumber; |
(1) 取前10条不同id记录,假如最后1条记录的ID依然有相同的,那么取出来。
select id,name from mynumber where id in (select id from (select distinct id from mynumber) tt where rownum<=10); select * from (select id,name,RANK() over ( order by id ) case1,DENSE_RANK() over ( order by id ) case2,row_number() over ( order by id ) case3 from mynumber) tt where case1<=10; select * from (select id,name,RANK() over ( order by id ) case1,DENSE_RANK() over ( order by id ) case2,row_number() over ( order by id ) case3 from mynumber) tt where case1 between 5 and 10; |
(2)取前10条记录,假如第10条记录的ID 还有相同的,那么取出来。
select * from mynumber where id in (select id from mynumber where rownum <=10); select * from (select id,name,RANK() over ( order by id ) case1,DENSE_RANK() over ( order by id ) case2,row_number() over ( order by id ) case3 from mynumber) tt where case2<=10; select * from (select id,name,RANK() over ( order by id ) case1,DENSE_RANK() over ( order by id ) case2,row_number() over ( order by id ) case3 from mynumber) tt where case2 between 5 and 10; |
最新相关文章
发表评论