在 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

但似乎这不是方法。

戈登·利诺夫

我认为您的方法没有任何问题:

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章