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 忽略A..D和M..p可能有多个具有相同值的元素

编辑:同样,B需要将N、C与O、D与p匹配

表格将有多组这样的值,例如,G将匹配Q..S,但这些值将在未显示的其他字段的单独组中

根据表中的其他字段,可能存在许多这样的匹配集


建议还是想法?最好使用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