表结构: tableTest
字段:  F_a,F_b,F_c
F_c的值只有两个,'F'和'S'当表中多条记录的F_a和F_b 相同时,分别做如下处理:
如果记录中同时有'F'和'S'的数据时,删除'F'的记录,留下'S'的记录;
如果记录中只有'S'的数据时,只留下1条'S' 的数据,其他删除.SQL

解决方案 »

  1.   

    需要保留的结果with as tt
    (select f_a,f_b,f_c,row_number()over(partition by f_a,f_b order by f_c desc) rn from tableTest)
    select * from tt whre rn=1;
      

  2.   

    --当表中多条记录的F_a和F_b 相同时,分别做如下处理:
    --如果记录中同时有'F'和'S'的数据时,删除'F'的记录,留下'S'的记录;
    --如果记录中只有'S'的数据时,只留下1条'S' 的数据,其他删除. 
    delete from tableTest t 
    where exists (
       select 1 from (select t1.rowid,
    row_number() over(partition by t1.F_a,t1.F_b order by t1.F_c desc)row_num 
    from tableTest t1) t2
    where t2.row_num>1 and t2.rowid = t.rowid;
      

  3.   

    delete from test t
     where rowid <> (select rowid
                       from (select t1.rowid,
                                    f_c,
                                    f_a,
                                    f_b,
                                    row_number() over(partition by t1.F_a, t1.F_b order by t1.F_c desc) row_num
                               from TEST t1) t2
                      where t.f_a = t2.f_a
                        and t.f_b = t2.f_b
                        and t2.row_num = 1)