选择行我与SQL非常强大,但我想不出很好的解决这个“相似”的数据分析问题:与最小差
给定一个表是一个整数集,我需要将每个整数与第二个表中最相似(最小绝对差)的整数进行匹配。通常我会做一个笛卡尔连接,并按照数字的不同进行排序,但是我只需要从每个表中获得每行的一个配对,所以两个表中的任何值都不能使用两次。
任何想法如何做到这一点?
编辑:实施例:
TABLE_A
34
57
108
219
380
5000
表-B
4000
200
400
99
40
33
34
4600
配对将是从表-A一个行并从表-B最近的行:
RESULT
34,34
57,40
108,99
219,200
380,400
5000,4600
因此,任何一个表的行都不会出现两次。
编辑:更多解释:我试图解决这个问题,从table_a给出1行,我们发现table_b中最接近的1行。这成为一对,并被删除。然后从table_a中取下一行并重复。所以我们试图为每一行找到最佳匹配并优化配对,而不是试图优化总体差异。
“...每个表格的每行有一个分区...”令人困惑。它是“在第一个表格中获取每个值并在第二个表格中找到最接近的值”?还是有一些要求,第二个表中的每个值都必须出现在列表中,否则必须出现在最终集合中?也许一个小例子会有所帮助 – 2011-05-19 18:37:43
您可以添加示例数据来帮助我们可视化输入和输出吗?我们可以假设整数在每个表中都是唯一的吗?一张桌子上有5张和7张,另一张是6张? 6应该出现两次,因为它接近于5和7 – gbn 2011-05-19 18:38:20
如果您正在寻找组合之间总差异最小的解决方案,那么如果您在一个表中有5个和8个,第二个表中有7个和15个,那么(5,7),(8,15)。 ((7-5)+(15-8))== 9,但((8-7)+(15-5)== 11,所以即使最小的差异在7和8之间也是如此。我们确实需要知道如何优先考虑解决方案并解决冲突/重复问题,正如gbn所提到的那样。 – 2011-05-19 18:50:02