sql - 如何查找日期并找到最接近的匹配项
问题描述
我在使用 SQL 时遇到了这个问题,我想在两列之间找到最接近的匹配日期。想象一下这是我的数据集:
'LY Date' 只是我想放入新列'Closest Date' 的'Date' 列的去年日期,每行的'LY Date' 最接近的'Date'。
示例:22-02-2022 的最后一年日期为 21-02-2021。该日期最接近“日期”列中的 15-02-2021,因此我将其放在“最近日期”中
解决方案
我将这些列称为“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
推荐阅读
- java - 为什么将值放在 Entry 而不是 ThreadLocal 中?
- data-visualization - 如何用图像替换行值?
- php - 如何在 Laravel 中同时使用“分页()”和清单?
- swift - Swift 生成奇数数组问题
- google-api - SDM API 调用返回 Enterprise not found
- python - Python中的埃及分数,而循环没有测试足够高的单位分数
- ssis - 派生列的问题
- recharts - Recharts 放大挂钩
- c++ - 我需要帮助将此 ppc 指令翻译成 c++
- c# - 自定义 Asp.NET Core Identity 未经授权的响应类型和状态码