GROUP BY在不同年份持续数月

Kev*_*vin 6 mysql group-by date

我有一张桌子(但在很多地方):

DATE         STUFF
-------------------
2011-12-01   DATA
2011-12-02   DATA
2011-12-03   DATA
...
2011-12-31   DATA
2012-01-01   DATA
2012-01-02   DATA
Run Code Online (Sandbox Code Playgroud)

我的表涵盖了从2005年到2012年的多年.我想获得每年每个月的AGGREGATE函数值,即SUM/AVG/MAX/MIN.简单:

GROUP BY DATE_FORMAT(DATE, '%Y'), DATE_FORMAT(DATE, '%m')
Run Code Online (Sandbox Code Playgroud)

我希望在那些年里做同样的3个月时间......这适用于除了一个以外的所有人:

GROUP BY DATE_FORMAT(DATE, '%Y'), DATE_FORMAT(DATE, '%m') IN (12, 01, 02)
Run Code Online (Sandbox Code Playgroud)

我的其他时间段有效,因为它们在同一年(03,04,05),(06,07,08)和(09,10,11)......但是上面的GROUP BY正在分组2012年12月2012年1月/ 2月.我的时间段必须是2011年12月和2012年1月/ 2月,2010年12月和2011年1月/ 2月......

我希望保持这种通用性,因此我不必使用日期跨度进行更新,以便将代码放在多个位置的存储过程中.

如果在第12个月,那么我已经尝试将年份提前一年加入到表中.这产生了不良结果.

lc.*_*lc. 1

我在这里假设了一些关于您真正想要做什么DATE_FORMAT(DATE, '%m') IN (12, 01, 02),但是:

SELECT IF(DATE_FORMAT(DATE, '%m') = 12, DATE_FORMAT(DATE, '%Y') + 1, DATE_FORMAT(DATE, '%Y')) AS yr, 
    CASE DATE_FORMAT(DATE, '%m')
        WHEN 12 THEN 1
        WHEN 1 THEN 1
        WHEN 2 THEN 1
        WHEN 3 THEN 2
        WHEN 4 THEN 2
        WHEN 5 THEN 2
        WHEN 6 THEN 3
        WHEN 7 THEN 3
        WHEN 8 THEN 3
        WHEN 9 THEN 4
        WHEN 10 THEN 4
        WHEN 11 THEN 4
    END AS qtr
FROM ...
GROUP BY IF(DATE_FORMAT(DATE, '%m') = 12, DATE_FORMAT(DATE, '%Y') + 1, DATE_FORMAT(DATE, '%Y')), 
    CASE DATE_FORMAT(DATE, '%m')
        WHEN 12 THEN 1
        WHEN 1 THEN 1
        WHEN 2 THEN 1
        WHEN 3 THEN 2
        WHEN 4 THEN 2
        WHEN 5 THEN 2
        WHEN 6 THEN 3
        WHEN 7 THEN 3
        WHEN 8 THEN 3
        WHEN 9 THEN 4
        WHEN 10 THEN 4
        WHEN 11 THEN 4
    END
Run Code Online (Sandbox Code Playgroud)