一个表里面有可能存在两条记录具体如下:
orgid        机构ID        
sell        销售量
sellwhere     数据来源      (包括ERP,IC,二流) 
selldate          销售日期
现在是我每天通过一个服务从三个不同的地方取得销售数据,取数的规律是先从ERP,然后从IC,在从二流,由于ERP数据中的延时,所以需要从其他的地方取得销售数据,但月底的时候ERP的数据会全部上来,这样就造成了我们取得的销售数据存在多个相同的。也就是说一个机构ID同一天的销售数据有几条,现在我需要在取得ERP的销售数据以后,把已经存在的当天的非ERP数据删除。请问什么算法最好。

解决方案 »

  1.   

    方案1: DELETE FROM test A WHERE sellwhere<>'ERP' AND EXISTS(
    SELECT 1 FROM test B WHERE A.orgid=b.orgid AND A.selldate=B.selldate AND B.sellwhere='ERP'); 如果没有索引,不要用;对于海量数据表,不管有没有索引都不要用方案2:CREATE TABLE test2 AS
    SELECT orgid,sell,selldate,MIN(sellwhere) AS sellwhere
    FROM test
    GROUP BY orgid,sell,selldate
    /处理完毕之后,用这个表替换 test 即可
      

  2.   

    如果能确保IC和二流取过来的数据没有重复的话
    1.把本月IC和二流的数据在放入到正式表后,同步到一张临时表中(可以用触发器)
    2. 月底从ERP取过来的数据先更临时表中的数据做对比过滤掉已经存在的,再放入到正式表中
        可以用二楼的 方案1