在SQL结果中(在MySQL或Perl端)填充空日期的最直接方法是什么?

在SQL结果中(在MySQL或Perl端)填充空日期的最直接方法是什么?

我正在用如下的查询从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 |

我想出了一个非常尴尬(几乎可以肯定是错误的)的解决办法,每个月都有很多天,还有一些数学,但是在MySQL或Perl方面,必须有更直接的解决办法。

我为什么这么笨,有什么天才的主意/耳光吗?


最后,我使用了一个存储过程,该存储过程为所讨论的日期范围生成了一个临时表,原因如下:

  • 我知道每次我要找的日期范围
  • 不幸的是,所讨论的服务器不是我可以在atm上安装perl模块的服务器,它的状态已经破旧到没有任何远程日期:-y。

Perl的日期/日期-迭代答案也很好,我希望我可以选择多个答案!


一只斗牛犬
浏览 638回答 3
3回答

茅侃侃

当我不得不处理这个问题时,为了填写缺少的日期,我实际上创建了一个引用表,其中包含了我感兴趣的所有日期,并加入了日期字段中的数据表。很粗糙,但很管用。SELECT DATE(r.date),count(d.date) FROM dates AS r  LEFT JOIN table AS d ON d.date = r.date  GROUP BY DATE(r.date) ORDER BY r.date ASC;至于输出,我只想用选择进入OUTFILE而不是手工生成CSV。让我们不用担心逃亡的特殊角色。
打开App,查看更多内容
随时随地看视频慕课网APP