【问题标题】:matching value by non-unique id and minimum date difference通过非唯一 id 和最小日期差异匹配值
【发布时间】:2016-10-27 04:09:16
【问题描述】:

我通过 R 中的 RSQLite 包使用 sqlite。

我有两张桌子: 表 1 有重要的列“PERMCO”和“Reporting_Period”。 ('Reporting_Period' 是一个整数日期)

表 2 有重要的列“PERMCO”和“日期”。 ('date' 是一个整数日期)

我想以表 1 作为左表进行左连接。 问题是 'PERMCO' 在第二个表中不是唯一的(按行,有很多重复项)。

对于表 1 的给定行,我希望第二个表中的匹配项是表 2 中匹配PERMCO 的行,该行在绝对日期上与第一个表中的“Reporting_Period”最接近。

不太清楚如何做到这一点......

谢谢

【问题讨论】:

  • 到目前为止你做了什么?代码/查询?
  • 添加示例查询和预期输出

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


【解决方案1】:

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,因此您可能需要更改查询以减去两个日期。

【讨论】:

    猜你喜欢
    • 2015-06-30
    • 2011-01-24
    • 1970-01-01
    • 2012-04-11
    • 2021-01-15
    • 2019-04-30
    • 2022-01-07
    • 2019-09-21
    • 1970-01-01
    相关资源
    最近更新 更多