V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
luhongfei66
V2EX  ›  科技

提问!有没有好办法能筛选出重复导入的数据?实际开发中第一次遇见有点像算法题的需求.

  •  
  •   luhongfei66 · 2020-07-15 11:55:04 +08:00 · 2653 次点击
    这是一个创建于 1353 天前的主题,其中的信息可能已经有所发展或是发生改变。

    现在有 A 表和 A 的子表 B 表,由于历史原因 B 表有重复导入数据,例如重复导入两次,A 表是执行更新操作只有一条数据,而 B 表是会有两份属于 A 表的数据,B 表没有生成时间或者什么字段可以区分开重复导入,只有每条的 ID 不同。A 表中有总金额是正确的,B 表中把其中一份数据的金额加起来就会等于 A 表中的金额.

    重复导入的数据大概有几千笔 A 表数据,目前的做法是先测试一份重复导入的数据,把重复导入归属同个 A 表的 B 表数据提取出来,进行 DFS 全排列,如果在排列的过程中累计金额等于 A 表的金额则判断是为一组,如果出现多种组合累计金额等于 A 表金额则输出来人工判断,这种方案有个问题就是全排列的效率很低,当长度大于 10 的时候就会很慢了。

    如果有更好的思路,希望能不吝赐教,谢谢。

    2 条回复    2020-07-15 15:00:56 +08:00
    lllue
        1
    lllue  
       2020-07-15 14:13:17 +08:00
    有个想法
    1 、分组合计一下,可以筛选掉一下(如果一定有重复数据,就不走这趴)
    2 、分组内 distinct 后合计一下与 A 表对上了,再筛选掉一些
    3 、步骤 2 中过滤后的数据,递归合计,得到一条以上的结果,输出

    主要是不要一上来就排列,实际需要的应该是组合,建议贪心算法试试?
    luhongfei66
        2
    luhongfei66  
    OP
       2020-07-15 15:00:56 +08:00
    @lllue 多谢你的回答 Thanks♪(・ω・)ノ,这块还有个麻烦的地方是有可能一次导入内里面就有重复的数据,还不能轻易去重。现在是采用了比较笨的方法,默认只重复导入了两次来分组,如果重复导入超过两次的记录 ID 再人工干涉纠正,o(╥﹏╥)o
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2815 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 14:43 · PVG 22:43 · LAX 07:43 · JFK 10:43
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.