2017-07-25 116 views
0

我試圖合併兩個表(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; 

回答

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