gpt4 book ai didi

MySQL 如何填充范围内缺失的时间/日期?

转载 作者:行者123 更新时间:2023-11-29 05:38:27 26 4
gpt4 key购买 nike

我正在尝试根据同一语句中的星期几和一天中的小时提取数据(这样我就可以看到每小时和一周内我获得了多少次访问。这是语句。

SELECT
count(id) as count,
HOUR(created) as hour_of_day,
WEEKDAY(created) as day_of_week,
DATE_FORMAT(created,'%W') name_of_day
FROM visitors
GROUP BY day_of_week,hour_of_day
ORDER BY day_of_week,hour_of_day ASC

一些示例数据

    count   hour_of_day day_of_week name_of_day
2 0 0 Monday
1 1 0 Monday
1 4 0 Monday
4 5 0 Monday
1 6 0 Monday
4 7 0 Monday
1 9 0 Monday
1 10 0 Monday
1 12 0 Monday
1 13 0 Monday
2 16 0 Monday
5 18 0 Monday
5 19 0 Monday

问题如您所见,数据中有许多小时的数据丢失。当我创建一个图表时,每天都需要 [x,x,x,x,x,x,x] 形式的数据,这将与从第一个输出开始的 24 小时时间线相匹配,我需要缺失的为“0”。

虽然我可以在 PHP 端使用循环来处理它,但一周中的每一天和其中的每一个小时都在循环,这相当烦人而且绝对不干净。

是否可以不使用临时表(例如在查询本身中包含 24 位数字等?)

最佳答案

不是最漂亮的。但如果您真的不能使用临时表,它应该可以解决问题:

select ifnull(count,0) as count,dh.hour_of_day,
dh.day_of_week,date_format((date('2012-01-02') + interval dh.day_of_week day),'%W') as name_of_day
from
(
select day_of_week,hour_of_day
from
(
select 0 as day_of_week union select 1 union select 2 union select 3
union select 4 union select 5 union select 6
) d
join
(
select 0 as hour_of_day
union select 1 union select 2 union select 3 union select 4
union select 5 union select 6 union select 7 union select 8
union select 9 union select 10 union select 11 union select 12
union select 13 union select 14 union select 15 union select 16
union select 17 union select 18 union select 19 union select 20
union select 21 union select 22 union select 23
) h
) dh
left outer join
(
SELECT
count(id) as count,
HOUR(created) as hour_of_day,
WEEKDAY(created) as day_of_week,
DATE_FORMAT(created,'%W') name_of_day
FROM visitors
GROUP BY day_of_week,hour_of_day
) v on dh.day_of_week = v.day_of_week and dh.hour_of_day = v.hour_of_day
ORDER BY dh.day_of_week,dh.hour_of_day ASC;

不过要小心!如果您跨多个星期运行查询,那么一周中的多天将被加在一起。您可能需要考虑添加“仅本周”谓词。例如,将 where yearweek(created) = yearweek(now()) 添加到您的原始选择中,以获取本周的数据。

关于MySQL 如何填充范围内缺失的时间/日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8725374/

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