首页 > 解决方案 > 获取 SQL 中最接近的日期作为列

问题描述

我在 SQL 中有一个要求,我必须从日期列表中检查最接近它的日期。例如:从下面的数据我必须检查是否有日期" 2020-03-21" 数据:

name   date
abc    2020-03-20
abc    2020-03-21
abc    2020-03-23
def    2020-03-22
def    2020-03-24

预期的:

name   date        expected
abc    2020-03-20  2020-03-21
abc    2020-03-21  2020-03-21
abc    2020-03-23  2020-03-21
def    2020-03-22  2020-03-22
def    2020-03-24  2020-03-22

根据之前的帖子,使用 orderby datediff 和 rownum,我能够以正确的顺序获取 rownum,但有点卡住,就像如何在名称级别获取最接近的日期一样。

标签: sqlsql-servertsqldateclosest

解决方案


您可以为此使用子查询:

select
    t.*,
    (
        select top 1 t1.date 
        from mytable t1 
        where t1.name = t.name
        order by abs(datediff(d, t1.date, '2020-03-21')), t.date
    ) expected
from mytable t

子查询在具有相同name. 如果有联系,则首选“早期”日期。


推荐阅读