选择最小日期后 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);
我正在尝试创建一个新列,其中 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);