我有一个查询,该查询根据其活动日期带来数据。查询如下:
where al.ACTIVITY_DATE between '2017-01-01 00:00:00.000' and '2018-12-01 00:00:00.000'
它选择所有活动都在此数据范围内。
现在,从2019年开始,我需要在日期范围内进行更改,为2019-12-01 00:00:00:.000
。
我不想做的是每年手动对该报告进行更改。是否可以选择最近2年的数据以及今年至2019年12月31日的数据?
答案 0 :(得分:3)
只需执行以下操作:
WHERE al.ACTIVITY_DATE BETWEEN DATEADD(yy,-1,DATEADD(yy,DATEDIFF(yy,0,GETDATE()),0))
AND DATEADD(yy, DATEDIFF(yy, 0, GETDATE()) + 1, -1)
这将使它成为最近两年的动态。
这是上一年的开始
DATEADD(yy,-1,DATEADD(yy,DATEDIFF(yy,0,GETDATE()),0))
这是今年的年底。
DATEADD(yy, DATEDIFF(yy, 0, GETDATE()) + 1, -1)
答案 1 :(得分:0)
我认为这是得出去年初的最简单方法:
DECLARE @start date = DATEFROMPARTS(YEAR(GETDATE())-1,1,1);
-- 2018-01-01
然后这是对去年和今年进行全日期范围查询的最简单方法,而不必担心数据类型,舍入等(read this to see why BETWEEN
is a bad idea)。
...
WHERE al.ACTIVITY_DATE >= @start
AND al.ACTIVITY_DATE < DATEADD(YEAR, 2, @start); -- 2020-01-01