Mysql 根据动态起始月,在多年内按季度分组月份
使用MySQL和PHP我正在构建一个JSON数组来填充数据表 就我的问题而言,假设数据表具有以下列: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月份开始的一个季度,或任
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;