読者です 読者をやめる 読者になる 読者になる

サイエンティストとマーケターのはざま

Pythonとか広告とかデータ分析とかとか


連続した日付データを生成する

日付で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 に取得期間をとり、上記のクエリを結合すれば完成です。

 

参考

sql - generate_series() equivalent in MySQL - Stack Overflow