-- Create table
create table TEST111
(
TEST1_1 VARCHAR2(10),
TEST1_2 VARCHAR2(10),
TEST1_3 VARCHAR2(10)
)
tablespace test
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 64
minextents 1
maxextents unlimited
);
insert into test111(test1_1, test1_2, test1_3)
values(1, 12, 33);
insert into test111(test1_1, test1_2, test1_3)
values(1, 123, 33);
insert into test111(test1_1, test1_2, test1_3)
values(1, 12, 111);
insert into test111(test1_1, test1_2, test1_3)
values(2, 12, 33);
insert into test111(test1_1, test1_2, test1_3)
values(1, 123, 12123);
select tt.*
from (
select t.test1_1,t.test1_2,t.test1_3,
RANK() OVER (PARTITION BY t.test1_1 order by rownum) Rnk
from test111 t
)tt
where tt.Rnk = 1;
结果:
test1_1, test1_2, test1_3, rnk
1 12 33 1
2 12 33 1
目的:
去除test1_1字段中的重复数据,同时又可以选择表中的其他字段
说明:
RANK() OVER (PARTITION BY t.test1_1 order by rownum) 得到按照rownum排序后t.test1_1字段中重复数据每行为第几次出现,取第一次出
现的所有数据,就可以排除t.test1_1的重复数据,和distinct和group by比的好处是,他同时还可以选出表中的其他字段,结果集不受影响