superi

働かないために全力で働くスタイル

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


スポンサーリンク

日付で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を使ったデータ処理

Pythonによるデータ分析入門 第2版 ―NumPy、pandasを使ったデータ処理

  • 作者: Wes McKinney,瀬戸山雅人,小林儀匡,滝口開資
  • 出版社/メーカー: オライリージャパン
  • 発売日: 2018/07/26
  • メディア: 単行本(ソフトカバー)
  • この商品を含むブログを見る
 

 

参考

sql - generate_series() equivalent in MySQL - Stack Overflow