2017-07-25 28 views
0

私は2つのテーブル(mcでpc)をマージしようとしていますが、以下の文はmcから複数のレコードを生成する可能性があります。私は、キャスト(日付としてのpc.ten) - キャスト(日付としてのmc.to)が正であるが、できるだけ小さいmcのマッチだけを返すようにしたい。それ、どうやったら出来るの?最も近い一致を選択

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 
関連する問題