可以用distinct和group by但是我只希望排除一个字段的重复数据,同时还希望select其他几个字段,
1、用group by只能select分组的字段,
2、用distinct会将select列表中的所有字段综合后排除重复,而不是我希望的那一个字段
3、如果建立临时表,用过程扫描整个表,去摘需要的数据插入临时表,这个动作又有点大了,怕影响用户使用请教有什么好办法??
1、用group by只能select分组的字段,
2、用distinct会将select列表中的所有字段综合后排除重复,而不是我希望的那一个字段
3、如果建立临时表,用过程扫描整个表,去摘需要的数据插入临时表,这个动作又有点大了,怕影响用户使用请教有什么好办法??
字段: test1_1, test1_2, test1_3
数据: 1 12 33
1 123 33
1 12 111
2 12 33
2 123 12123
以上这些数据,只希望排除在test1_1这个字段中数据重复的记录,同时还要select出test1_2和test1_3两个字段
如果用 select distinct test1_1 from ... 这样结果是对的,但不能select出test1_2和test1_3
如果用 select distinct test1_1, test1_2, test1_3 这样选出了三个字段,但是结果就不对了
from (
select t.test1_1,t.test1_2,t.test1_3,
RANK() OVER (PARTITION BY t.test1_1 order by rownum) Rnk
from test t
)tt
where tt.Rnk <2;
数据: 1 12 33
1 123 33
1 12 111
2 12 33
2 123 12123
你要的结果是不是:字段: test1_1, test1_2, test1_3
数据: 1 12 33
123 33
12 111
2 12 33
123 12123
是不是?
--表结构
create table THINK_TEST
(
TRANSSTATIONID VARCHAR2(20),
STATIONID VARCHAR2(20),
TEST1 VARCHAR2(20)
)
--数据
insert into THINK_TEST (TRANSSTATIONID, STATIONID, TEST1)
values ('456', '1', '1');
insert into THINK_TEST (TRANSSTATIONID, STATIONID, TEST1)
values ('222222222', '2', '1');
insert into THINK_TEST (TRANSSTATIONID, STATIONID, TEST1)
values ('333333333', '2', '2');
insert into THINK_TEST (TRANSSTATIONID, STATIONID, TEST1)
values ('444444444', '3', '2');
commit;select * from think_test;
TRANSSTATIONID STATIONID TEST1
-------------------- -------------------- --------------------
456 1 1
222222222 2 1
333333333 2 2
444444444 3 2select tt.*
from (
select t.test1,t.transstationid,t.stationid,
RANK() OVER (PARTITION BY t.test1 order by rownum) Rnk
from think_test t
)tt
where tt.Rnk <2;TEST1 TRANSSTATIONID STATIONID RNK
-------------------- -------------------- -------------------- ----------
1 456 1 1
2 333333333 2 1
from (
select t.t01,t.t02,t.t03,
RANK() OVER (PARTITION BY t.t01 order by rownum) Rnk
from test t
)tt
得出来的结果就是上面的显示的!
非常非常感谢!以前曾经用过这种格式的row_number()分析函数,去做分页,但是对于这些有用的函数的用法、涵义等还是知道的太少了,请教哪里有中文的资料??谢谢