选择差异最小的行

pow*_*tte 5 sql

我对SQL非常强大,但我想不出这个"外观相似"数据分析问题的好方法:

给定一个带有一组整数的表,我需要将每个整数与最相似的第二个表中的整数相匹配(最小绝对差).通常我会根据数字的差异进行笛卡尔连接和排序,但是我只需要为每个表中的每一行进行一次配对,因此两个表中的值都不能使用两次.

知道怎么做到这一点?

编辑:示例:

TABLE_A

34
57
108
219
380
5000
Run Code Online (Sandbox Code Playgroud)

表-B

4000
200
400
99
40
33
34
4600
Run Code Online (Sandbox Code Playgroud)

配对将是table_a中的一行和table_b中最接近的行:

结果

34,34
57,40
108,99
219,200
380,400
5000,4600
Run Code Online (Sandbox Code Playgroud)

因此,两个表中的行都不会出现两次.

编辑:更多澄清:我试图解决这个问题,从table_a给出1行,我们找到table_b中最接近的1行.这成为一对,并被删除.然后从table_a取下一行并重复.所以我们试图找到每一行的最佳匹配并优化配对,而不是尝试优化总差异.

gbn*_*gbn 3

假设

给定 table_a 中的 1 行,我们找到 table_b 中最接近的 1 行

select
   *
from
   TABLE_A a
   cross apply
   (select top 1 Number from TABLE_B b order by abs(b.Number - a.Number)) b2
Run Code Online (Sandbox Code Playgroud)

这也假设 b 中的行可以重复:尝试一下,看看它是否符合您的要求。但是,这应该适合您的示例数据,因此它可以回答您的问题......