我正在写一个查询,在这个查询中我需要获得过去三年的数据。我想要捕捉的是从一月到现在的过去三年。随着时间的推移,这需要动态地将月份添加到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月。
Fix:
谢谢大家的意见,从你们的评论中学到一点,我想……
WHERE
YEAR(PDBC.PDBC_EFF_DT) BETWEEN YEAR(GETDATE()) - 3 AND YEAR(GETDATE())发布于 2022-01-05 17:44:36
上面的评论说明了确定起点的正确方法:
DECLARE @start datetime
= DATEFROMPARTS(DATEPART(YEAR, GETDATE()) - 3, 1, 1);基于这个时间框架查询表中数据的正确方法--确保您可以在datetime列上使用任何现有或未来的索引--使用一个range谓词:
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;发布于 2022-01-05 17:24:56
试着在过滤器中比较年复一年:
where DatePart(Year,date_eff_dt) >=DatePart(Year,GetDate())-3发布于 2022-01-05 17:32:27
如果你在3年前寻找所有数据的话,更早的答案应该是有效的。我可能误解了你的问题,但我相信你正在寻找3个完整的日历年的数据。我将使用以下模式:
WHERE YEAR(date_eff_dt) BETWEEN YEAR(GETDATE()) - 3 AND YEAR(GETDATE()) - 1https://stackoverflow.com/questions/70596615
复制相似问题