MySQL:按南方年份分组?

MySQL:按南方年份分组?,mysql,Mysql,假设我们有这样一个简单的表 DATE VALUE -------------------- 2013-01-01 23 2013-06-12 34 2013-07-22 788 2013-12-16 234 2014-01-23 56 2014-04-19 88 2014-09-23 7987 2014-11-05 66 2015-02-17 987 2015-05-05 896 现在,假设我们要提取按年份分组的平均

假设我们有这样一个简单的表

DATE          VALUE
--------------------
2013-01-01    23
2013-06-12    34
2013-07-22    788
2013-12-16    234
2014-01-23    56
2014-04-19    88
2014-09-23    7987
2014-11-05    66
2015-02-17    987
2015-05-05    896
现在,假设我们要提取按年份分组的平均值,我们将使用

SELECT AVG(`VALUE`) FROM tablename GROUP BY YEAR(`DATE`)
但是,如果我们不是从1月到12月,而是从7月到6月(如果你生活在南半球,这对很多数据来说都很有意义)来定义一年会怎么样

我相信一定有一个简单的方法来实现从7月到6月的+1分组。我似乎无法理解

--编辑--

太棒了!在发布这个问题的几分钟内,两个很好的解决方案出现了,这两个方案都值得接受。我接受罗兰的解决方案是因为它的简洁,但利奥·塔拉的回答让我意识到我忘记了输出相关的澳大利亚年份。因此,基于这两个答案,我提出了这个解决方案,它完全符合我的要求:

SELECT 
YEAR(`DATE` - INTERVAL 6 MONTH) as `australyear`,
AVG(`VALUE`) 
FROM tablename 
GROUP BY YEAR(`DATE` - INTERVAL 6 MONTH)

分组时只需将日期加上6个月。对不起,我不知道mysql的确切语法

伪代码:

SELECT AVG(`VALUE`) FROM tablename GROUP BY YEAR(`DATE` + '6 MONTHS');
试试这个:

SELECT AVG(`VALUE`)
FROM tablename
GROUP BY 
    CASE
        WHEN MONTH('DATE') BETWEEN 1 AND 6 THEN YEAR('DATE') - 1
        ELSE YEAR(`DATE`)
    END
若要在字段列表中显示年份,则必须按以下方式重写查询:

SELECT
     CASE
        WHEN MONTH('DATE') BETWEEN 1 AND 6 THEN YEAR('DATE') - 1
        ELSE YEAR(`DATE`)
    END, AVG(`VALUE`)
FROM tablename
GROUP BY 
    CASE
        WHEN MONTH('DATE') BETWEEN 1 AND 6 THEN YEAR('DATE') - 1
        ELSE YEAR(`DATE`)
    END

语法应该是
年(日期+间隔6个月)
我知道有一个优雅的解决方案!再想一想,减去间隔可以正确地确定相应的南方年份(参见我的编辑)。干杯我实际上是在根据罗兰和你的回复编辑我的文章。罗兰的答案很简洁,但你的答案让我意识到,在查询结果中添加实际的澳大利亚年份是非常有帮助的。罗兰的解决方案将在2013年提供两行。我希望我能接受你的两个答案。但肯定是我投的票。干杯@汤姆:好的,祝你今天愉快;)