कोशिश करें:
select a.id, a.x as ax, b.x as bx, x.min_abs_diff
from table_a a
join table_b b
on a.id = b.id
join (select a.id, min(abs(a.x - b.x)) as min_abs_diff
from table_a a
join table_b b
on a.id = b.id
group by a.id) x
on x.id = a.id
and abs(a.x - b.x) = x.min_abs_diff
पहेली:http://sqlfiddle.com/#!15/ab5ae/5/0
हालांकि यह आपके अपेक्षित आउटपुट से मेल नहीं खाता है, मुझे लगता है कि आउटपुट आपके द्वारा वर्णित के आधार पर सही है, जैसा कि आप देख सकते हैं कि प्रत्येक जोड़ी में 1 के निरपेक्ष मान के साथ अंतर होता है।
संपादित करें - a से b के क्रम के आधार पर निम्न का प्रयास करें:
select *
from (select a.id,
a.x as ax,
b.x as bx,
x.min_abs_diff,
row_number() over(partition by a.id, b.x order by a.id, a.x) as rn
from table_a a
join table_b b
on a.id = b.id
join (select a.id, min(abs(a.x - b.x)) as min_abs_diff
from table_a a
join table_b b
on a.id = b.id
group by a.id) x
on x.id = a.id
and abs(a.x - b.x) = x.min_abs_diff) x
where x.rn = 1
पहेली:http://sqlfiddle.com/#!15/ab5ae/19/0