问题描述如下:
有表table1
有如下字段:字段1,字段2,字段3,字段4,字段5.
想做如下去重选择:字段1和字段2完全相同的,认为是重复记录。请问如何实现选取多个字段,按照字段1和字段2去重呢?
ps:如果紧紧是取字段1和字段2,可以这样:
select distinct 字段1,字段2 from table1;
但是这样的话只有字段1和字段2的信息,如果想要多个字段信息,该怎么处理呢?谢谢 

解决方案 »

  1.   

    select 字段1,字段2,字段3,字段4,字段5
      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等条件。
      

  2.   

    select distinct (字段1、字段2)、字段3、字段4、字段5 from table1;
      

  3.   


    分析函数 或者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)
      

  4.   

    既然就
    row_number() over (partition by 字段1,字段2 order by 1)
      

  5.   

    row_number() over (partition by 字段1,字段2 order by 1)这是一个方法select 字段1,字段2,min(字段||字段4||字段5) from table group by 字段1,字段2
      

  6.   

    假设有这么一些数据
    字段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