现有一张表A。存放客户债务信息。系统每天自动计算出结果存放在表A中。导致大量的垃圾数据,现在需要处理表中的垃圾数据。求解决方案
例如:
表A
========================================================================
client_id    measure_year     client_pd      client_ead     client_lgd
6578           2007-01-01      1000            1000          1000
6578           2007-01-02      1000            1000          1000
6578           2007-01-03      1000            1000          1000
6578           2007-01-04      500             1000          1000
7840           2007-01-01      2000            1000          1000
7840           2007-01-02      2000            1000          1000
7840           2007-01-03      1000            1000          1000
=========================================================================
处理完垃圾数据后的结果:
表A:
=========================================================================
client_id    measure_year     client_pd      client_ead     client_lgd
6578           2007-01-03      1000            1000          1000
6578           2007-01-04      500             1000          1000
7840           2007-01-02      2000            1000          1000
7840           2007-01-03      1000            1000          1000
=========================================================================
删除除去measure_year字段只外。完全匹配的行。并切保留其中一行数据。
表A中的数据量比较大。希望可以考虑的效率问题。
请高手赐教。谢谢!!

解决方案 »

  1.   

    最优删除重复记录方法:
    DELETE FROM tableA E WHERE E.ROWID > (SELECT MIN(X.ROWID) FROM tableA X WHERE X.client_id = E.client_id and x.client_pd=e.client_pd and x.client_ead=e.client_ead and x.client_lgd=e.client_lgd); 
    楼主,记得这个已经回复过了啊。
    还有个从应用系统解决的办法,就是插入记录的时候判断一下,如果重复就不要插入了,插入一个日志表就行了,这样这个表就不会有重复记录了。
      

  2.   

    这个方法我试过了。但是如果其中有些字段为空值的话。就比对不出来。请问如何解决呢?比如 client_pd 字段有些行为空。后面的where条件中有 x.client_pd=e.client_pd 就比对不出
    现在在判断的时候已经+了判断了。不会造成大量的垃圾数据了。但是以前的数据需要清理。所以才问了这个问题。
      

  3.   

    老大,client_pd 字段为空的肯定是错误的啊,直接删掉不就行了吗?
    你先按照上面方法删除大部分垃圾数据,然后再
    delete from table where client_pd is null;
      

  4.   

    其实可以使用nvl()函数来解决字段为空的问题。现在问题基本解决了,谢谢kinglht给予知道。备份肯定要做的。这个是肯定的HOHO。