现在有 A 表和 A 的子表 B 表,由于历史原因 B 表有重复导入数据,例如重复导入两次,A 表是执行更新操作只有一条数据,而 B 表是会有两份属于 A 表的数据,B 表没有生成时间或者什么字段可以区分开重复导入,只有每条的 ID 不同。A 表中有总金额是正确的,B 表中把其中一份数据的金额加起来就会等于 A 表中的金额.
重复导入的数据大概有几千笔 A 表数据,目前的做法是先测试一份重复导入的数据,把重复导入归属同个 A 表的 B 表数据提取出来,进行 DFS 全排列,如果在排列的过程中累计金额等于 A 表的金额则判断是为一组,如果出现多种组合累计金额等于 A 表金额则输出来人工判断,这种方案有个问题就是全排列的效率很低,当长度大于 10 的时候就会很慢了。
如果有更好的思路,希望能不吝赐教,谢谢。
1
lllue 2020-07-15 14:13:17 +08:00
有个想法
1 、分组合计一下,可以筛选掉一下(如果一定有重复数据,就不走这趴) 2 、分组内 distinct 后合计一下与 A 表对上了,再筛选掉一些 3 、步骤 2 中过滤后的数据,递归合计,得到一条以上的结果,输出 主要是不要一上来就排列,实际需要的应该是组合,建议贪心算法试试? |
2
luhongfei66 OP @lllue 多谢你的回答 Thanks♪(・ω・)ノ,这块还有个麻烦的地方是有可能一次导入内里面就有重复的数据,还不能轻易去重。现在是采用了比较笨的方法,默认只重复导入了两次来分组,如果重复导入超过两次的记录 ID 再人工干涉纠正,o(╥﹏╥)o
|