首页 > 解决方案 > 如何查找日期并找到最接近的匹配项

问题描述

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

在此处输入图像描述

'LY Date' 只是我想放入新列'Closest Date' 的'Date' 列的去年日期,每行的'LY Date' 最接近的'Date'。

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

标签: sqllookupamazon-athena

解决方案


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

您可以从 LYDATE 开始,当 DATE 降序排序并且仅包含小于 '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 

推荐阅读