SQL:匹配近似值集
在我的数据集中,有一组数值要与另一个表中的另一组相同大小的值相匹配,其中需要最接近的匹配,而不需要经过检查:SQL:匹配近似值集,sql,sql-server,join,approximate,Sql,Sql Server,Join,Approximate,在我的数据集中,有一组数值要与另一个表中的另一组相同大小的值相匹配,其中需要最接近的匹配,而不需要经过检查: Left Right A M B N C O D P 所以我们的目标是从左到右连接,给出一个M作为结果行,其中A
Left Right
A M
B N
C O
D P
所以我们的目标是从左到右连接,给出一个M作为结果行,其中A建议还是想法?最好使用T-SQL或基本SQL。这是否符合您的要求
select l.*,
(select max(r.right)
from right r
where r.right <= l.left
) as RightMatch
from left l;
注意:这只是SQL的一个草图。左和右显然是保留字。我只是用它们来匹配查询中的命名约定。列名或表名不应使用保留字。如果我理解正确,[left]和[right]位于不同的表中
SELECT l.Value, r.Value rValue
FROM [LEFT] l
CROSS APPLY (SELECT TOP 1
Value
FROM [Right] r
WHERE l.value < r.value
ORDER BY Value) r
SQLServer2005或更高版本上提供了行号到目前为止,我最好的方法是:选择每个集合的最大左侧和最大右侧,例如,A-M到另一个表格中,从表格的原始临时副本中删除该行号,然后重复,直到它们都匹配。此解决方案是非常程序化的-可能不是很好的SQL风格。感谢您的帮助,但因为它不清楚:B需要匹配N,C到O等。不仅是最大到最大,而且每个都处于顺序位置,在同一组表中有许多这样的集合。左边和右边只是问问题,并不能反映真正的表名,L和R是更好的选择。你是说a吗?因为这与数据后面的问题中所述的不同
WITH LID AS (
SELECT Value
, _ID = Row_Number() OVER (ORDER BY Value)
FROM [LEFT]
, RID AS (
SELECT Value
, _ID = Row_Number() OVER (ORDER BY Value)
FROM [RIGHT]
)
SELECT l.Value, r.Value
FROM LID l
INNER JOIN RID r ON LID._ID = RID._ID