gpt4 book ai didi

mysql - 在 sql 结果中填充空日期的最直接方法是什么(在 mysql 或 perl 端)?

转载 作者:行者123 更新时间:2023-11-29 03:32:54 25 4
gpt4 key购买 nike

我正在使用如下查询从 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 模块的服务器,而且它的状态非常破旧,以至于它没有安装任何远程 Date::-y

Perl Date/DateTime 迭代答案也很好,我希望我可以选择多个答案!

最佳答案

当你在服务器端需要类似的东西时,你通常会创建一个包含两个时间点之间所有可能日期的表,然后将这个表与查询结果左连接。像这样:

create procedure sp1(d1 date, d2 date)
declare d datetime;

create temporary table foo (d date not null);

set d = d1
while d <= d2 do
insert into foo (d) values (d)
set d = date_add(d, interval 1 day)
end while

select foo.d, count(date)
from foo left join table on foo.d = table.date
group by foo.d order by foo.d asc;

drop temporary table foo;
end procedure

在这种特殊情况下,最好在客户端进行一些检查,如果当前日期不是 previos+1,则添加一些附加字符串。

关于mysql - 在 sql 结果中填充空日期的最直接方法是什么(在 mysql 或 perl 端)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27727673/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com