获取 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" 日期是首选。
我在 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" 日期是首选。