gpt4 book ai didi

mysql - 按天分组,仍然显示没有行的天数?

转载 作者:可可西里 更新时间:2023-11-01 07:17:10 28 4
gpt4 key购买 nike

我有一个日志表,其中包含一个名为 logTime 的日期字段。我需要显示日期范围内的行数和每天的记录数。问题是我仍然想显示没有记录的日子。

是否可以仅使用 SQL 来执行此操作?

例子:


SELECT logTime, COUNT(*) FROM logs WHERE logTime >= '2011-02-01' AND logTime <= '2011-02-04' GROUP BY DATE(logTime);

它返回这样的东西:

+---------------------+----------+| logTime             | COUNT(*) |+---------------------+----------+| 2011-02-01          |        2 || 2011-02-02          |        1 || 2011-02-04          |        5 |+---------------------+----------+3 rows in set (0,00 sec)

我也想显示 2011-02-03 这一天。

最佳答案

MySQL 不会为你发明行,所以如果数据不存在,它们自然不会显示。

您可以创建一个日历表,并加入其中,

create table calendar (
day date primary key,
);

用日期填充此表(使用存储过程很容易,或者只是一些通用脚本),直到 2038 年左右,其他东西可能会破坏单元,成为问题。

然后您的查询变成例如

SELECT logTime, COUNT(*) 
FROM calendar cal left join logs l on cal.day = l.logTime
WHERE day >= '2011-02-01' AND day <= '2011-02-04' GROUP BY day;

现在,您可以使用其他列来扩展日历表,这些列可以告诉您月、年、周等,这样您就可以轻松地生成其他时间单位的统计信息。 (纯粹主义者可能会争辩说日历表会有一个 id 整数主键,日志表引用而不是日期)

关于mysql - 按天分组,仍然显示没有行的天数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4902297/

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