首页 > 解决方案 > 仅加入最相似匹配行的联接

问题描述

假设我们有两个表 T0,T1

T0 有两个相关的列 T1id 和 Quantity

T1 有两个相关的列 id 和 Quantity

T1 可以有多个具有相同 id 的行

我想加入基于两个条件:

  1. T0.T1id = T1.id
  2. T1 行的 T1.Quantity 与 T0.T1id = T1.id 集合中的 T0.Quantity 最接近

什么是实现这一目标的好方法?

编辑:添加示例数据

+----+------+----------+
| T0 | T1id | Quantity |
+----+------+----------+
|  0 |  180 |      112 |
+----+------+----------+

+----+-----+----------+
| T1 | id  | Quantity |
+----+-----+----------+
|  0 | 180 |       50 |
|  1 | 180 |      100 |
|  2 | 180 |      150 |
+----+-----+----------+

+--------+------+----------+------------+
| Result | T1id | Quantity | T1Quantity |
+--------+------+----------+------------+
|      0 |  180 |      112 |        100 |
+--------+------+----------+------------+

标签: mysqlsql

解决方案


使用FIRST_VALUE()窗口函数:

SELECT DISTINCT T0.T1id, T0.Quantity, 
       FIRST_VALUE(T1.Quantity) OVER (PARTITION BY T0.T1id ORDER BY ABS(T0.Quantity - T1.Quantity)) T1Quantity
FROM T0 INNER JOIN T1
ON T0.T1id = T1.Id 

请参阅演示


推荐阅读