问题描述如下:
有表table1
有如下字段:字段1,字段2,字段3,字段4,字段5.
想做如下去重选择:字段1和字段2完全相同的,认为是重复记录。请问如何实现选取多个字段,按照字段1和字段2去重呢?
ps:如果紧紧是取字段1和字段2,可以这样:
select distinct 字段1,字段2 from table1;
但是这样的话只有字段1和字段2的信息,如果想要多个字段信息,该怎么处理呢?谢谢
有表table1
有如下字段:字段1,字段2,字段3,字段4,字段5.
想做如下去重选择:字段1和字段2完全相同的,认为是重复记录。请问如何实现选取多个字段,按照字段1和字段2去重呢?
ps:如果紧紧是取字段1和字段2,可以这样:
select distinct 字段1,字段2 from table1;
但是这样的话只有字段1和字段2的信息,如果想要多个字段信息,该怎么处理呢?谢谢
from (select 字段1,字段2,字段3,字段4,字段5,
row_number() over (partition by 字段1,字段2) rs
from table1 ) tmp
where tmp.rs = 1
;
你那个去重复是去那一条啊?根据什么去的?你可以在over()里边加order by等条件。
分析函数 或者not exists rowidselect * from tb a
where not exists(select 1 from tb b where a.col1=b.col1 and a.col2=b.col2 and a.rowid<b.rowid)--根据什么条件去掉重复的哪条
row_number() over(partition by col1,col2 order by 1)
row_number() over (partition by 字段1,字段2 order by 1)
字段1 字段2 字段3 字段4 字段5
1 2 1 1 1
1 2 3 4 2
这两条数据字段1和字段2是一样的,你就认为是重复的,那么,你要保留哪一条啊?
如果随便一条都行,就这样
select 字段1,字段2,(select 字段3 from table t2 where t2.字段1=t.字段1 and t2.字段2=t.字段2 and rownum = 1)as 字段3 from table t group by 字段1,字段2