Generating a MySQL hourly breakdown from current timestamp

做~自己de王妃 提交于 2019-12-14 03:44:24

问题


I'm afraid this is probably a very embarrassingly easy question - but my mind is just completely stuck at this hour.

I have a table that stores the number of activities carried out by different people, and the time it took place in.

I want to create a report that accepts the person's name as a parameter, and show the number of activities per hour for that person during each of the previous 24 hours starting from current timestamp (now()).

Right now,

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

only returns to me those hours when any activity was present. However, I want a complete 24 hour breakdown with zero for when there was no activity.

i.e. I'm getting

Hour | No. of Activities
1    | 34
4    | 22
9    | 86

but I want

Hour | No. of Activities
1    | 34
2    | 0
3    | 0
4    | 22
5    | 0
... etc.

How do I do this?

(The order of hours in the example is irrelevant)


回答1:


You can create a hourly table, and do a 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;


来源:https://stackoverflow.com/questions/7374728/generating-a-mysql-hourly-breakdown-from-current-timestamp

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!