Mysql 根据动态起始月,在多年内按季度分组月份

Mysql 根据动态起始月,在多年内按季度分组月份,mysql,Mysql,使用MySQL和PHP我正在构建一个JSON数组来填充数据表 就我的问题而言,假设数据表具有以下列: Year: 2010,2011,2012,2013...<br/> Month: 1,2,3,4,5...<br/> Value: 100, 150, 200 etc...<br/> 因此,1月、2月和3月的值可能都是100,那么加起来的结果是300,其他月份也是如此 现在我的问题来了,当我想按一个财务季度对价值进行分组时,例如,从2月份开始的一个季度,或任

使用MySQLPHP我正在构建一个JSON数组来填充数据表

就我的问题而言,假设数据表具有以下列:

Year: 2010,2011,2012,2013...<br/>
Month: 1,2,3,4,5...<br/>
Value: 100, 150, 200 etc...<br/>
因此,1月、2月和3月的值可能都是100,那么加起来的结果是300,其他月份也是如此

现在我的问题来了,当我想按一个财务季度对价值进行分组时,例如,从2月份开始的一个季度,或任何其他季度

我有一个用于季度分组的语句,它使用两个变量,可以通过SQL查询访问,即起始年(即2014年)和起始月(即2年)

它基本上会为每个日历月分配一个0,3,6,9的值,以便于分组

在从2月份开始的财政年度中,第1-3季度的情况良好,但最后一个季度的情况有所不同,因为它包括2014年11月和12月的数据以及2015年1月的数据

结果我得到了5行数据,而不是4行

这是因为前面的GROUP by year子句,这是一个重要的补充,因为我们可能希望生成一个表来查看连续多年的季度

所以我要寻找的是一种通过抵消起始月份来将年份分组的方法

因此,当一年从一月开始时,它将分组为一月至十二月,但如果我们将其改为二月开始,它将分组为二月至一月

欢迎任何意见、建议

问候,,
卡尔

我刚才解决了一个类似的问题(一份Moodle报告,按年度和季度汇总作业分数),它是这样的:

select year(from_unixtime(s.timemarked)) as year, quarter(from_unixtime(s.timemarked)) % 4 + 1 as quarter, count(distinct data1) as "tickets graded" from mdlassignment_submissions s where grade >= 0 group by year, quarter order by year, quarter;
您正在做的相关部分是
quarter(从unixtime(s.timemarked))%4+1作为quarter


正如另一位评论员指出的,MySQL有一个
quarter()
函数,但它不做财务季度。然而,由于(据我所知,至少在查阅相关维基百科页面的基础上)财务季度仅被1抵消,因此最后的
%4+1
应将其转换为1

你知道有四分之一的函数,对吗?
GROUP BY year, (((round(((((month-(start_month-1))+((year-start_year)*12))-((year-start_year)*12))/3)+0.33,0)/4)+4)-floor(((round(((((month-(start_month, '%m')-1))+((year-start_year)*12))-((year-start_year*12))/3)+0.33,0)/4)+4)))*12  
select year(from_unixtime(s.timemarked)) as year, quarter(from_unixtime(s.timemarked)) % 4 + 1 as quarter, count(distinct data1) as "tickets graded" from mdlassignment_submissions s where grade >= 0 group by year, quarter order by year, quarter;