質問: sql文を教えてください。 mysqlを使っています。 【売上テーブル】 || 日付 || 金額 || ----------------- || 2011/01/01 || 100 || || 2011/01/01 || 200 || || 2011/01/02 || 600 || ・ ・ ・ || 2012/12/31 || 500 || || 2012/12/31 || 100 || select sum(金額) from 売上テーブル where 日付 between '2011-01-01' and '2011-12-31' group by date_format(日付, '%y/%m') で月初から月末のデータを表示させることはできますが、 2011/01/10~2011/02/09を一か月として 以降は 2011/02/10~2011/03/09 2011/03/10~2011/04/09 ・ ・ ・ 2011/12/10~2012/01/09 といった感じに1年間のデータを表示させる方法がわかりません。 どうぞ宜しくお願いします。
回答: 一旦サブクエリで月集計した結果をグループ化して使えば可能です。 月集計では日の9以下は-1ヶ月としています。 select x.tmp,sum(x.金額) from (select 日付, case when date_format(日付,'%e') < 10 then date_format(日付 - interval 1 month, '%y/%m') else date_format(日付, '%y/%m') end tmp, 金額 from mysql.uriage) x where x.日付 between '2011-01-10' and '2011-12-31' group by x.tmp; ※サブクエリ部分だけ結果を見ればどの日付がどの月に集計されたかがわかりやすいです。