連続した日付データを生成する
日付でgroup by してカウントしたときに、たとえば
date count
2015-08-10 3
2015-08-11 5
2015-08-13 1
2015-08-14 2
のように、2015-08-12のデータが存在しないため、2015-08-12をスキップしてしまうことがあります。グラフを描くときや結合するときに何かと不便なので、
date count
2015-08-10 3
2015-08-11 5
2015-08-12 0
2015-08-13 1
2015-08-14 2
としたいところです。
PostgreSQLであればgenerate_series関数で連続した日付を生成できますが、mySQLにはgenerate_series関数が存在しないため、以下のクエリにより、連続した日付を生成します。
select
date_format(
adddate('2015-08-10', @num:=@num+1), '%Y-%m-%d') date
from
any_table,
(select @num:=-1) num
limit 4
adddateに開始日を、limit に取得期間をとり、上記のクエリを結合すれば完成です。
Pythonによるデータ分析入門 第2版 ―NumPy、pandasを使ったデータ処理
- 作者: Wes McKinney,瀬戸山雅人,小林儀匡,滝口開資
- 出版社/メーカー: オライリージャパン
- 発売日: 2018/07/26
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
参考
sql - generate_series() equivalent in MySQL - Stack Overflow