从当前时间戳生成MySQL每小时​​细分

col*_*_px 2 mysql sql time timestamp reporting-services

我担心这可能是一个非常令人尴尬的简单问题 - 但我的思绪完全停留在这个时刻.

我有一张表格,可以存储不同人员开展的活动数量,以及发生的时间.

我想创建一个报告,接受该人的姓名作为参数,并显示从当前时间戳(now())开始的每个过去24小时内该人每小时的活动数.

马上,

SELECT hour(TimeStamp), activities FROM tbl1 
WHERE timestamp >= DATE_SUB(NOW(), INTERVAL 24 HOUR)  AND Name = ? 
GROUP BY hour(timestamp)
Run Code Online (Sandbox Code Playgroud)

只有在任何活动出现的那几个小时才回到我身边.但是,如果没有活动,我想要一个完整的24小时故障,零点.

即我得到了

Hour | No. of Activities
1    | 34
4    | 22
9    | 86
Run Code Online (Sandbox Code Playgroud)

但我想要

Hour | No. of Activities
1    | 34
2    | 0
3    | 0
4    | 22
5    | 0
... etc.
Run Code Online (Sandbox Code Playgroud)

我该怎么做呢?

(示例中的小时数无关紧要)

ajr*_*eal 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;
Run Code Online (Sandbox Code Playgroud)