mysql - 仅加入最相似匹配行的联接
问题描述
假设我们有两个表 T0,T1
T0 有两个相关的列 T1id 和 Quantity
T1 有两个相关的列 id 和 Quantity
T1 可以有多个具有相同 id 的行
我想加入基于两个条件:
- T0.T1id = T1.id
- 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 |
+--------+------+----------+------------+
解决方案
使用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
请参阅演示。
推荐阅读
- javascript - 了解何时以及在 node.js 中实现哪种设计模式的最佳方法是什么
- python - 修改类的 Python 方法装饰器
- python - 在 tkinter 画布上动态调整矩形大小
- kotlin - 在当前上下文中如何访问 Kotlin 协程元素?
- python - python中'lambda'表达式的问题
- windows - 如果机器规格发生变化,我们能否预测 Windows 应用程序将如何工作?
- python - Selenium driver.requests.Timeout 在加载超时后不会停止请求
- asp.net-core - MVC Core 中的混合用户身份
- javascript - 使移动视图在 +90 度的横向上保持纵向模式
- javascript - 通过对象数组的 Javascript 映射