【问题标题】:How to look-up dates and find closest match如何查找日期并找到最接近的匹配项
【发布时间】:2021-10-06 10:31:26
【问题描述】:

我在使用 SQL 时遇到了这个问题,我想在两列之间找到最接近的匹配日期。想象一下这是我的数据集:

“LY 日期”只是“日期”列的去年日期,我想将其放入新列“最近日期”中,每行的“LY 日期”最接近的“日期”。

示例:22-02-2022 的最后一年日期为 21-02-2021。该日期最接近“日期”列中的 15-02-2021,因此我将其放在“最近日期”中

【问题讨论】:

    标签: sql lookup amazon-athena


    【解决方案1】:

    我将这些列称为“DATE.DATE”和“LYDATE.DATE”。

    当DATE降序排列且只包含小于‘LYDATE’的项目时,你可以从LYDATE开始,获取DATE的前1条记录。然后你可以翻转 DATE 表,过滤掉那些小于 LYDATE 的项目后得到前 1。这将为您提供小于我们正在寻找的最接近的日期和大于我们正在寻找的最接近的日期。

    然后我计算这两个限制之间的日期差异,看看哪个差异较小,并将适当的限制值返回为 ClosestDate。

    SELECT
        CASE WHEN DATEDIFF(ns,lowerlimit.date, LYDate.date) < DATEDIFF(ns, upperlimit.date, LYDATE.date) THEN lowerlimit.date ELSE upperlimit.date END as ClosestDate
        FROM LYDate
        OUTER APPLY (SELECT TOP 1 DATE FROM DATE WHERE DATE.DATE < LYDATE.DATE ORDER BY DATE.DATE DESC) lowerlimit
         OUTER APPLY (SELECT TOP 1 DATE FROM DATE WHERE DATE.DATE > LYDATE.DATE ORDER BY DATE.DATE ASC) upperlimit 
    

    【讨论】:

    • 感谢您的回复!我刚刚添加了一个标签 - 我正在使用 AWS Athena 进行查询,它不支持像 OUTER APPLY 这样的功能。
    • 我对 Amazon Athena 不熟悉。我决定留下我的答案,以防有人使用 MS SQL 遇到这个问题。
    猜你喜欢
    • 2018-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多