有1张表有3个字段,记录是的个人习惯,如起床后进行A、B、C、D这4个动作,则成为个人习惯1001,另外一个人起床后是进行A、C、D、B这4个动作,那是个人习惯1002,还有1个人起床后进行的是A、B、C、D这4个动作,那么该个人习惯1003应该与1001进行合并,去掉1003的记录或者1001的记录,请教这样该如何写SQL解决?
如第1块和第3块的个人行为的顺序完全一致,那么认定为是一个习惯,就去重,去掉第1块或第3块的记录。
第2,4块的个人行为顺序与其它的都不一样,可以继续保留。记录去重

解决方案 »

  1.   

    delete from 表名 where rowid not in(select max(rowid) from 表名 group by (列名));
      

  2.   

    这个估计要先合并name项再去重。
    select 
    distinct id,listagg(name,',')  within GROUP (order by seq)   over (partition by id) 
    from test01  
      

  3.   

    嵌套的比较厉害,不过应该算实现了坐等高效代码delete from test
    where id in 
    (
    select id from 
    (
    select t.*,row_number() over (partition by count1 order by id desc) rn
    from 
    (
    select id,wm_concat(name) count1 from test group by id 
    ) t
    ) t1
    where t1.rn>1
    );