我担心这可能是一个非常令人尴尬的简单问题 - 但我的思绪完全停留在这个时刻。
我有一张表格,可存储不同人员开展的活动数量及其发生的时间。
我想创建一个报告,接受此人的姓名作为参数,并显示从当前时间戳(now()
)开始的前24小时内每个小时的每小时活动数。
现在,
SELECT hour(TimeStamp), activities FROM tbl1
WHERE timestamp >= DATE_SUB(NOW(), INTERVAL 24 HOUR) AND Name = ?
GROUP BY hour(timestamp)
只有在任何活动出现的那几个小时,才会返回给我。但是,如果没有活动,我希望完整的24小时细分为零。
即。我正在
Hour | No. of Activities
1 | 34
4 | 22
9 | 86
但我想要
Hour | No. of Activities
1 | 34
2 | 0
3 | 0
4 | 22
5 | 0
... etc.
我该怎么做?
(示例中的小时数无关紧要)
答案 0 :(得分:5)
您可以创建hourly
表格,并执行LEFT JOIN
create table hourly
(
/* hour is not a reserved keyword */
hour smallint(2) not null default 0
);
insert into hourly values (0),(1).... until 24
SELECT
hourly.hour,
COALESCE(COUNT(activities),0) AS "No of Activities"
FROM hourly
LEFT JOIN tbl1 ON hourly.hour=hour(tbl1.TimeStamp)
WHERE
tbl1.timestamp>=DATE_SUB(NOW(), INTERVAL 24 HOUR) AND
tbl1.Name=?
GROUP BY hourly.hour
ORDER BY hourly.hour;