选择最小日期后 1 年内的最后一个日期

Pick the last date within 1 year of the min date

我正在尝试创建一个新列,其中 returns 是第一个日期后 1 年内的最后一个日期。

示例:

我有以下日期。

5/6/2011
8/9/2011
3/5/2012
6/8/2012

因此查询应选择 2012 年 3 月 5 日作为该场景中的最后日期。

您几乎可以将您的英语规范翻译成 sql 这个:

 SELECT max(d) 
 FROM  t
 WHERE d < (SELECT DATEADD(year, 1, MIN(d)) FROM t)

假设您的列名称是 dt 并且您的 table 名称是 Tbl

SELECT MAX(dt)
FROM Tbl
WHERE dt < (SELECT MIN(dt) + 365 FROM Tbl)

一种方法使用 window 函数:

select max(dt)
from (select t.*, min(dt) over () as min_dt
      from t
     ) t
where dt < dateadd(year, 1, min_dt);

不过我想我更喜欢相关子查询:

select max(dt)
from t
where dt < (select dateadd(year, 1, min(dt)) from t);