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

时间:2011-09-10 21:09:18

标签: mysql sql reporting-services time timestamp

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

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

我想创建一个报告,接受此人的姓名作为参数,并显示从当前时间戳(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.

我该怎么做?

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

1 个答案:

答案 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;