特定の範囲内で一連の日付を生成するための MySQL の最適な方法は何ですか?
私が考えているアプリケーションは、レポートするデータがあるかどうかに関係なく、日付ごとに行を返すレポート クエリを作成することです。最も単純な形式は次のとおりです。
select dates.date, sum(sales.amount)
from <series of dates between X and Y> dates
left join sales on date(sales.created) = dates.date
group by 1
多数の日付を含むテーブルを作成しようとしましたが、これはあまり良い回避策ではないようです。
ベストアンサー1
もしあなたが私のような状況にいるなら一時テーブルの作成は禁止されています、 そして変数の設定も許可されていません、しかし、あなたは特定の期間の日付のリストを生成する今年を例に挙げて集計を行う場合は、これを使用します
select * from
(select adddate('1970-01-01',t4*10000 + t3*1000 + t2*100 + t1*10 + t0) gen_date from
(select 0 t0 union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t0,
(select 0 t1 union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t1,
(select 0 t2 union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t2,
(select 0 t3 union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t3,
(select 0 t4 union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t4) v
where gen_date between '2017-01-01' and '2017-12-31'