【问题标题】:SQL: Match Set of Approximate valuesSQL:匹配一组近似值
【发布时间】:2014-06-19 15:21:41
【问题描述】:

在我的数据集中,有一组数值可以与另一个表中的另一组相同大小的值相匹配,其中“最接近的匹配”(不需要遍历:

Left   Right
A      M
B      N
C      O
D      P

所以目标是从左到右连接,将 A M 作为结果行,其中 A

(忽略 A..D 和 M..P 可能有多个具有相同值的元素。)

编辑:同样,B 需要匹配 N,C 匹配 O,D 匹配 P。

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

可能有许多这样的“组”匹配项(基于表中的其他字段。

建议或想法?优先使用 T-SQL 或基本 SQL。

【问题讨论】:

  • 感谢帮助,但由于不清楚:B 需要匹配 N,C 匹配 O 等。不仅仅是 Max 到 Max。但是每个都处于序号位置,在同一组表中有许多这样的集合。 (Left 和 Right 只是提出问题,绝不反映真实的表名,L 和 R 会是更好的选择。
  • 你说的是zip join吗?因为这与数据后问题中所述的不同

标签: sql sql-server join approximate


【解决方案1】:

这是你想要的吗?

select l.*,
       (select max(r.right)
        from right r
        where r.right <= l.left
       ) as RightMatch
from left l;

注意:这只是 SQL 的草图。 leftright (显然)是保留字。我只是使用它们来匹配您查询中的命名约定。列名或表名不应使用保留字。

【讨论】:

    【解决方案2】:

    到目前为止,我最好的做法是:将每组(例如 A-M)的 Max L(eft) 和 Max R(ight) 选择到另一个表中,从原始表(临时副本)中删除它,然后重复直到它们都匹配。这个解决方案是非常程序化的——可能不是好的 SQL 风格。

    【讨论】:

      【解决方案3】:

      如果我理解正确,[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
      

      公式的最小部分由TOP 1ORDER BY 解析。

      使用此查询,所有值 A..D 都将匹配 M,因为它们都小于 M,而 M 对每个人都是封闭的,因此所述算法可能缺乏一些规则。


      如果您想要一个 zip 连接,那么一种方法是创建一个按值排序的行号并按这些数字连接

      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
      

      ROW_NUMBER 在 SQLServer 2005 或更高版本上可用

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-05-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-28
        • 2013-07-10
        • 1970-01-01
        • 2013-01-27
        相关资源
        最近更新 更多