我想加入两个表,其中T1Col1 = T2Col1和T1Col2 = T2Col2,找到T1Col3与T2Col3最接近的匹配。一个是仅一行。
表1
Col1 |Col2 |Col3
123 |ABC |20170731000022
123 |ABC |20170731000019
234 |DEF |20170731110001
234 |DEF |20170731110003
表2
Col1 |Col2 |Col3
123 |ABC |20170731000020
234 |DEF |20170731110000
234 |DEF |20170731110002
输出
T1Col1 |T1Col2 |T1Col3 |T2Col1 |T2Col2 |T2Col3
123 |ABC |20170731000022 | | |
123 |ABC |20170731000019 |123 |ABC |20170731000020
234 |DEF |20170731110001 |234 |DEF |20170731110000
234 |DEF |20170731110003 |234 |DEF |20170731110002
答案 0 :(得分:0)
尝试以下查询,它可以在SQL服务器中运行。希望这有助于解决您的问题。基本上我发现tab1中的col3和tab2中的col3之间存在绝对差异,然后对它们进行排名并选择最小值.He eif multiple rows有相同的排名(差异相同)然后我们选择其中之一。如果你只想要正面的列你需要删除abs
select * from
(
select t.*,
row_number() over(partition by t1col1,t1col2 order by diff asc) as rn
from
(
select tab1.col1 as t1col1,tab1.col2 t1col2,tab1.col3
t1col3,tab2.col1 t2col1,tab2.col2 t2col2,tab2.col3
t2col3,abs(tab1.col3-tab2.col3) as diff
from tab1 join tab2
on tab1.col1=tab2.col1
and tab1.col2=tab2.col2
)t
)f where rn=1