次のようなクエリを使用して、mysql テーブルから簡単な csv を作成しています。
select DATE(date),count(date) from table group by DATE(date) order by date asc;
そして、それらをperlのファイルにダンプするだけです:
while(my($date,$sum) = $sth->fetchrow) {
print CSV "$date,$sum\n"
}
ただし、データには日付のギャップがあります。
| 2008-08-05 | 4 |
| 2008-08-07 | 23 |
データをパディングして、欠落している日数をゼロカウントのエントリで埋めて、次のようにしたいと思います。
| 2008-08-05 | 4 |
| 2008-08-06 | 0 |
| 2008-08-07 | 23 |
私は非常にぎこちない (そしてほぼ間違いなくバグのある) 回避策を、1 か月あたりの日数の配列といくつかの計算でまとめましたが、mysql または perl 側のいずれかでもっと簡単なものが必要です。
なぜ私がそんなに愚かなのかについて、何か天才的なアイデア/平手打ちはありますか?
いくつかの理由から、問題の日付範囲の一時テーブルを生成するストアド プロシージャを使用することになりました。
- 毎回検索する日付範囲を知っている
- 問題のサーバーは、残念ながら atm に perl モジュールをインストールできるものではなく、リモートで何もインストールされていないほど老朽化していました。
Perl の Date/DateTime 反復回答も非常に良かったです。複数の回答を選択できたらいいのにと思います。