通过非唯一ID和最小日期差异匹配值

时间:2016-10-27 04:09:16

标签: sql sqlite group-by left-join rsqlite

我通过R。

中的RSQLite包使用sqlite

我有两张桌子: 表1列出了重要的专栏' PERMCO'和' Reporting_Period'。 (' Reporting_Period'是整数日期)

表2列出了重要的专栏' PERMCO'和' date'。 ('日期'是整数日期)

我想要将表1作为左表进行左连接。 事情是' PERMCO'在第二个表中不是唯一的(行方式,多个重复)。

对于表1的给定行,我希望第二个表中的匹配是表2中的行,其匹配的PERMCO在绝对日期最接近' Reporting_Period'在第一个表中。

不确定如何做到这一点......

谢谢

1 个答案:

答案 0 :(得分:0)

Idea是一个相关的子查询,用于从table1中的Reporting_Period获取table2中最接近的一天

SELECT t1.*, t2.*
FROM table1 t1
LEFT JOIN table2 t2
ON t1.permco = t2.permco
WHERE ABS(t2."date" - t1.Reporting_Period) = (SELECT MIN(ABS("date" - t1.Reporting_Period) )
                                  FROM table2 
                                  WHERE permco = t1.permco
                                  )
     OR t2.permco IS NULL --because you want a left join
;

我对Sqlite并不熟悉,因此您可能需要更改查询以减去两个日期。