我希望过滤器用于汇总Quarterly
数据。
对于Yearly
数据,我添加了公式。
对于Quarterly
数据,我现在已经进行了硬编码,但是需要让系统进行计算。
例如,下一个季度为Quarter 3
,我需要计算当前年度/当前季度的数字(该季度3个月的总和)
SNIPPET过滤器代码
WHERE [Status] = 'Complete' AND (YEAR([datefield]) = YEAR(GETDATE()) - 1 OR YEAR([datefield]) = YEAR(GETDATE()) - 2 OR YEAR([datefield]) = YEAR(GETDATE()) AND MONTH([datefield]) IN(4, 5, 6)) --Apr/May/June.
答案 0 :(得分:0)
很抱歉,提供的答案不完整。我回答后就想到了这一点。
SELECT * FROM table WHERE [Status] = 'Complete' AND [datefield] BETWEEN CONVERT(date, DATEADD(M, -2, DATEADD(D, -DAY(DATEADD(D, -1, GETDATE())), GETDATE()))) AND EOMONTH(DATEADD(D, -DAY(DATEADD(D, -1, GETDATE())), GETDATE()))
说明:
要使过滤器准确无误,您需要获取每月的第一天和最后一天。
第一天:
获取当前日期:
SELECT GETDATE()
2018-09-06 17:03:35.467
获取当前日期减去1
SELECT DATEADD(D, -1, GETDATE())
2018-09-05 17:03:35.467
将“当前日期减1”(上述结果)减去到当前日期。
SELECT DATEADD(D, -DAY(DATEADD(D, -1, GETDATE())), GETDATE())
2018-09-01 17:03:35.467
仅获取日期部分:
SELECT CONVERT(date, DATEADD(D, -DAY(DATEADD(D, -1, GETDATE())), GETDATE()))
2018-09-01
最后一天:
与获得第一天相同,但将CONVERT
更改为EOMONTH
,因为后者已经只返回date
部分的结果
SELECT EOMONTH(DATEADD(D, -DAY(DATEADD(D, -1, GETDATE())), GETDATE()))
2018-09-30
现在您拥有了
SELECT CONVERT(date, DATEADD(D, -DAY(DATEADD(D, -1, GETDATE())), GETDATE())) ,EOMONTH(DATEADD(D, -DAY(DATEADD(D, -1, GETDATE())), GETDATE()))
2018-09-01
2018-09-30
获取当前月份的前两个月。
SELECT CONVERT(date, DATEADD(M, -2, DATEADD(D, -DAY(DATEADD(D, -1, GETDATE())), GETDATE())))
请注意,我刚刚在第一天值中添加了DATEADD(M, -2, )
。
组合2个月前的第一天和当月的最后一天
SELECT CONVERT(date, DATEADD(M, -2, DATEADD(D, -DAY(DATEADD(D, -1, GETDATE())), GETDATE()))) ,EOMONTH(DATEADD(D, -DAY(DATEADD(D, -1, GETDATE())), GETDATE()))
2018-07-01
2018-09-30