从一月份开始获取过去三年的数据



我正在编写一个查询,其中需要获取过去三年的数据。我想捕捉的是从一月到现在的过去三年。随着时间的推移,这需要在2022年增加几个月,同时保留2019年的整个历史。

不幸的是,我的数据显示了从今天起的三年历史(36个月,2019年1月下降(。

查询:

WHERE PDBC.PDBC_EFF_DT >= DATEADD(YEAR,-3,GETDATE())

WHERE PDBC.PDBC_EFF_DT >= '01/01/2019'

工作,但不想在今年之后更新嵌入excel的年份。

输出:

https://i.stack.imgur.com/kC0G8.png

需要:

2019年1月至现在,最小日期更改为明年的2020年1月。

修复:

感谢大家的投入,从你们的每一条评论中都学到了一些东西,我想大概。。。

WHERE 
YEAR(PDBC.PDBC_EFF_DT) BETWEEN YEAR(GETDATE()) - 3 AND YEAR(GETDATE())

上面的注释显示了确定起点的正确方法:

DECLARE @start datetime 
= DATEFROMPARTS(DATEPART(YEAR, GETDATE()) - 3, 1, 1);

基于此时间框架查询表中数据的正确方法是使用范围谓词:

WHERE date_eff_dt >= @start

要求不明确,但如果你只想要这三年内的数据,而今年没有发生任何事情,只需添加一个终点:

AND date_eff_dt < DATEADD(YEAR, 3, @start)

或者你可以把它反过来:

DECLARE @end datetime
= DATEFROMPARTS(DATEPART(YEAR, GETDATE()), 1, 1);
SELECT 
...
WHERE date_eff_dt >= DATEADD(YEAR, -3, @end)
AND date_eff_dt <  @end;

如果您要查找3年前之后的所有数据,则前面的答案应该有效。我可能误解了你的问题,但我相信你正在寻找3个完整日历年的数据。我会使用以下模式:

WHERE YEAR(date_eff_dt) BETWEEN YEAR(GETDATE()) - 3 AND YEAR(GETDATE()) - 1

尝试在过滤器中逐年比较:

where DatePart(Year,date_eff_dt) >=DatePart(Year,GetDate())-3

最新更新