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

2020-07-15 11:55:04 +08:00
 luhongfei66

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

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

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

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

主要是不要一上来就排列,实际需要的应该是组合,建议贪心算法试试?
luhongfei66
2020-07-15 15:00:56 +08:00
@lllue 多谢你的回答 Thanks♪(・ω・)ノ,这块还有个麻烦的地方是有可能一次导入内里面就有重复的数据,还不能轻易去重。现在是采用了比较笨的方法,默认只重复导入了两次来分组,如果重复导入超过两次的记录 ID 再人工干涉纠正,o(╥﹏╥)o

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/690196

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX