选择所有完成的月份,直到SQL Server中的特定日期

时间:2019-07-15 23:44:12

标签: sql sql-server

我有一个查询,该查询返回某些时间序列信息。但是,由于我要对每个完成的月份进行分析,因此我想忽略上个月的信息,以免污染数据。因此实际数据将类似于以下内容:

       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

但是好像不是这样。

2 个答案:

答案 0 :(得分:1)

我认为您的方法没有错:

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
               );

答案 1 :(得分:0)

为什么不尝试只选择需要分析的月份

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