获取 SQL 中最近的日期作为列

Get closest date in SQL as a column

我在 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,但有点卡住了,比如如何在名称级别获取最近的日期。

您可以为此使用子查询:

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

子查询 returns 在具有相同 name 的行中最接近目标的可用日期(早于或晚于)。如果有关系,"early" 日期是首选。