【发布时间】:2022-01-17 22:44:09
【问题描述】:
我有一个数据表,其中相关列包含一个数字。我想将其加入到包含数字顺序列表的参考表中,并且我想将数据表中的每一行与参考表中最接近的数字(接近最小差异)匹配。
我可以做类似的事情
Select top 1 ref_number
from reference
where ref_number < data_number
order by ref_number desc
与ref_number > data_number 做类似的事情,找到最小的差异然后加入。这会起作用,但对于看似简单的操作来说,这将是一大堆代码,因为它需要为数据表的每一行遍历整个参考表两次,我认为它也会非常慢(参考表有大约 25000 个条目,数据表有大约 100 万个)。
所以问题:有没有一种更有效的方法可以将参考表中最接近的数字与数据表中的每个条目相匹配?如果两个表都按它们的数字排序,那么进行匹配应该会容易得多,但我看不到 SQL 代码来做到这一点。
这是我想要得到的简化示例。
参考表
ref_number other reference columns
1 ..
3
6
10
数据表
data_number
1
7
9.2
目标表
data_number ref_number other reference columns
1 1 ..
7 6
9.2 10
【问题讨论】:
-
可以使用表表达式,也可以使用横向查询。这取决于具体的数据库。您使用的是哪个数据库?
-
请添加几行样本数据和预期的结果。
标签: sql optimization query-optimization hana