MySQL で月を跨ぐ月毎集計

例えば締め日などが毎月5日の会社で月ごとの売り上げを出したい時など、
毎月1日からその月の最終日までの集計ではなく、
毎月6日から次の月の5日までの集計がほしいときに使えます。

MySQL日毎、周毎、月毎集計 を参考に

SELECT DATE(`date` + INTERVAL 5 - DAYOFMONTH(`date`) DAY) AS month , 
	SUM(`num`) AS total
FROM `hoge`
GROUP BY month

とやっても、 month の値が毎月5日に代わるだけで集計期間は変わらなかった。

よく考えてみると month の中でやっているのは、
元の日付に + 5 して、そこから元の日付をマイナスする
ということなので、日付を5日に強制しているだけでした。

今回必要なのは、
日付が5日までなら前月分集計、6日以降なら今月分集計
といった振り分けなので、

SELECT DATE_FORMAT((`date` - INTERVAL (DAYOFMONTH(`date`) <= 5) MONTH), '%Y-%m') AS month,
	SUM(`num`) AS total
FROM `hoge`
GROUP BY month

として、日付が5日までなら月を - 1 するようにしたらうまくいきました。