将SQL中的最接近日期作为一列

问题描述 投票:0回答:1

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

name   date
abc    2020-03-20
abc    2020-03-21
abc    2020-03-23
def    2020-03-20
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,但是有点像如何在名称级别获取最接近的日期。

sql-server closest
1个回答
0
投票

您可以为此使用子查询:

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
© www.soinside.com 2019 - 2024. All rights reserved.