我有一个返回某些时间序列信息的查询。但是由于我正在对每个完成的月份进行分析,因此我想忽略上个月的信息,以免污染数据。因此,实际数据如下所示:
T.Date T.Profit
1/1/2016 15
1/15/2016 25
1/29/2016 5
2/03/2016 10
所以,我在想做这样的事情:
哪里T.Date <= Datefromparts(Year(max(T.Date)),Month(Max(T.Date)),1)
我会收到类似的东西:
T.Date T.Profit
1/1/2016 15
1/15/2016 25
1/29/2016 5
但似乎这不是办法。
我认为你的方法没有错:
select t.*
from (select t.*, max(date) over () as max_date
from t
) t
where t.date < datefromparts(year(max_date), month(max_date), 1);
也许更通俗地说,这可以写成:
select t.*
from t
where t.date < (select dateadd(day, 1 - day(max(date)), max(date))
from t
);
你为什么不尝试只选择你需要分析的月份
select * from Datefromparts where MONTH([T.Date]) != MONTH(GETDATE()) AND YEAR([T.Date]) = 2016
此外,如果您愿意,您可以使用此获得所有前几个月
select * from Datefromparts where MONTH([T.Date]) < MONTH(GETDATE()) AND YEAR([T.Date]) = 2016