有没有办法按月分组?

Is there a way to group by monthly period?

我有一些数据需要查询,以了解哪个人在 9 个月内花费最多。我的数据跨越 5 年,9 个月的时间段可能包括从一年到下一年的几个月。

例如 2005 年 10 月到 2006 年 7 月。

我已经设法按 personid 和月份和年份进行分组,但是有没有办法让我按 9 个月的时间段分组?我想如果我能做到这一点,那么我就可以找到该分组中的最大值。

借助日期 table 或在我的情况下是 udf

Select DateR1,DateR1,PersonID,TotalSpent=sum(Spent)
 From  [SomeTable] A
 Join (
        Select DateR1=DateAdd(MM,-9,RetVal)
              ,DateR2=DateAdd(DD,-1,RetVal)
         from [dbo].[udf-Create-Range-Date]('2005-10-01','2016-07-31','MM',1)
      ) B on A.DataDate between B.DateR1 and B.DateR2
 Group By DateR1,DateR2,PersonID 
 Order by 1,3

子查询returns

DateR1      DateR2
2005-01-01  2005-09-30
2005-02-01  2005-10-31
2005-03-01  2005-11-30
2005-04-01  2005-12-31
2005-05-01  2006-01-31
2005-06-01  2006-02-28
...
2015-09-01  2016-05-31
2015-10-01  2016-06-30
2015-11-01  2016-07-31

所以在日期范围之间聚合数据只是一件小事

顺便说一句,这是连续的 9 个月

如果不滚动

Select DateR1,DateR2=DateAdd(DD,-1,DateR2) from [dbo].[udf-Create-Range-Date-Span]('2005-10-01','2016-07-31','MM',9)

Returns

DateR1      DateR2
2005-10-01  2006-06-30
2006-07-01  2007-03-31
2007-04-01  2007-12-31
2008-01-01  2008-09-30
2008-10-01  2009-06-30
2009-07-01  2010-03-31
2010-04-01  2010-12-31
2011-01-01  2011-09-30
2011-10-01  2012-06-30
2012-07-01  2013-03-31
2013-04-01  2013-12-31
2014-01-01  2014-09-30
2014-10-01  2015-06-30
2015-07-01  2016-03-31
2016-04-01  2016-07-30