有没有办法按月分组?
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
我有一些数据需要查询,以了解哪个人在 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