问题描述
我需要找到一张表与另一张表最接近的值。
例如,我需要通过检查表 Actual_Price 上的最接近值来使用表 New_Price 中的 Product 匹配其价格值
表新_价格
产品 | 价格 |
---|---|
X | 2.0 |
Z | 3.0 |
表实际_价格
Product_Desc | 价格 |
---|---|
ABC | 1.2 |
EFG | 3.4 |
计划结果:
产品 | 价格 | 产品描述 |
---|---|---|
X | 2.0 | ABG |
Z | 3.0 | EFG |
解决方法
嗯。 . .我认为相关子查询可以满足您的需求:
select np.*,(select ap.product_desc
from actual_price ap
order by abs(ap.price - np.price)
limit 1
) as product_desc
from new_price np;
,
您可以通过价格之间的最小绝对增量交叉连接或左连接带有窗口函数订单的两个价格表。这可能会给:
WITH old_near AS
(SELECT DISTINCT Actual_Price.Product_Desc,FIRST_VALUE(New_Price.Product) OVER (PARTITION BY Actual_Price.Product_Desc ORDER BY ABS(New_Price.Price - Actual_Price.Price)) new_product
FROM Actual_Price LEFT JOIN New_Price ON TRUE)
SELECT New_Price.*,old_near.Product_Desc
FROM New_Price LEFT JOIN old_near ON old_near.new_product = New_Price.Product;