【问题标题】:Select closest match选择最接近的匹配
【发布时间】:2017-07-26 04:58:53
【问题描述】:

我正在尝试合并两个表(pc 和 mc),但下面的语句可能会从 mc 中产生多条记录。我希望查询只返回 mc 中的匹配,其中 cast(pc.ten as date) - cast(mc.to as date) 为正但尽可能小。我怎么做?

CREATE TABLE test AS SELECT DISTINCT pc.number, mc.number
FROM pc
INNER JOIN mc
ON pc.member = mc.member AND pc.ned = mc.ned AND cast(pc.ten as date) BETWEEN cast(mc.to as date) + 1 AND cast(mc.to as date) + 11 AND
pc.ned IS NOT NULL AND mc.ned IS NOT NULL;

【问题讨论】:

    标签: sql postgresql inner-join


    【解决方案1】:
    CREATE OR REPLACE VIEW test AS 
    
      SELECT n1, n2 
      FROM (
        SELECT 
          pc.number as n1, 
          mc.number as n2, 
          ROW_NUMBER() OVER (ORDER BY cast(pc.ten as date) - cast(mc.to as date) ASC) AS Rank
        FROM pc
        INNER JOIN mc ON pc.member = mc.member AND pc.ned = mc.ned 
        WHERE cast(pc.ten as date) - cast(mc.to as date) > 0
      ) 
      WHERE Rank = 1
    

    【讨论】:

      猜你喜欢
      • 2021-05-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-10
      • 2011-03-01
      • 2015-03-18
      • 1970-01-01
      相关资源
      最近更新 更多