質問: ### 前提・実現したいこと 日毎の売上データを集計したテーブルがあります。 例えば、直近1週間/1ヶ月毎の集計を日々出したいときにどのようなクエリで実現できるかご教示いただけますと幸いです。 実行結果で得られる情報として、 --- 1/1: 100,000 ← 1/1から遡ること1週間の集計値 . . . 8/24: 100,000 ← 8/24から遡ること1週間の集計値 8/25: 125,000 ← 8/25から遡ること1週間の集計値 --- のようなケースを想定おり、 特定の日付のみのデータを得たいのではありません。 ■売上テーブル ・日付 ・売上 ■CREATE TABLE文 CREATE TABLE `sales` ( `created_at` date NOT NULL, `sales` int(11) NOT NULL DEFAULT '0', )
回答: 直近1ヶ月は危険だからやめたほうがいいです。 質問者さんが想定する1ヶ月とMySQL側が計算する1ヶ月が必ずしも一致しないでしょう。 1週間は単純に6日前から当日までと期間を確定できます ``` select created_at, (select sum(sales) from sales where created_at between t1.created_at - interval 6 day and t1.created_at) as sales 1week from sales as t1 /*エイリアス付加*/ ``` ※1ヶ月は ``` created_at between t1.created_at - interval 1 month + interval 1 day and t1.created_at ``` となりますが、前述の通り必ずしも想定と合致するわけではありません