如何解决使用左连接找到最接近值的有效方法
我需要在右表中找到最接近的值并将它们组合起来。 但是为了做到这一点,我的左连接查询在所有排列上运行,它需要大量资源来计算(我的基本表很大)
For example my A table looks like
<A,1>
<A,2>
<A,10>
And table B looks like :
<A,4>
<A,5>
<A,6>
<A,7>
For this example the result will be:
<A,1,2,10,7>
我是这么想的:
select * from (
select *,row_number() over(partition by rown order by abs(b-a) asc) diff from (
(select a,b,row_number over () rown from x) a
CROSS JOIN
(select a,b from x) b
on a.a = b.a
) )where diff =1
有没有更好更有效的方法来做到这一点?
解决方法
考虑下面的例子
select id,a.val a_val,b.val b_val
from tableA a
left join tableB b
using(id)
where true
qualify row_number() over(partition by id,a.val order by abs(a.val - b.val)) = 1
如果应用于您问题中的样本数据 - 输出为
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。