首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从一月开始获取过去三年的数据。

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

Stack Overflow用户
提问于 2022-01-05 16:54:11
回答 3查看 507关注 0票数 -1

我正在写一个查询,在这个查询中我需要获得过去三年的数据。我想要捕捉的是从一月到现在的过去三年。随着时间的推移,这需要动态地将月份添加到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:

谢谢大家的意见,从你们的评论中学到一点,我想……

代码语言:javascript
复制
WHERE 
YEAR(PDBC.PDBC_EFF_DT) BETWEEN YEAR(GETDATE()) - 3 AND YEAR(GETDATE())
EN

回答 3

Stack Overflow用户

发布于 2022-01-05 17:44:36

上面的评论说明了确定起点的正确方法:

代码语言:javascript
复制
DECLARE @start datetime 
        = DATEFROMPARTS(DATEPART(YEAR, GETDATE()) - 3, 1, 1);

基于这个时间框架查询表中数据的正确方法--确保您可以在datetime列上使用任何现有或未来的索引--使用一个range谓词:

代码语言:javascript
复制
WHERE date_eff_dt >= @start

要求还不清楚,但如果您只想在这三年内获得数据,而今年没有发生任何事情,只需添加一个结束绑定:

代码语言:javascript
复制
  AND date_eff_dt < DATEADD(YEAR, 3, @start)

或者你可以把它反过来翻过来:

代码语言:javascript
复制
DECLARE @end datetime
        = DATEFROMPARTS(DATEPART(YEAR, GETDATE()), 1, 1);

SELECT 
  ...
WHERE date_eff_dt >= DATEADD(YEAR, -3, @end)
  AND date_eff_dt <  @end;
票数 2
EN

Stack Overflow用户

发布于 2022-01-05 17:24:56

试着在过滤器中比较年复一年:

代码语言:javascript
复制
where DatePart(Year,date_eff_dt) >=DatePart(Year,GetDate())-3
票数 0
EN

Stack Overflow用户

发布于 2022-01-05 17:32:27

如果你在3年前寻找所有数据的话,更早的答案应该是有效的。我可能误解了你的问题,但我相信你正在寻找3个完整的日历年的数据。我将使用以下模式:

代码语言:javascript
复制
WHERE YEAR(date_eff_dt) BETWEEN YEAR(GETDATE()) - 3 AND YEAR(GETDATE()) - 1
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70596615

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档