【问题标题】:Generating a MySQL hourly breakdown from current timestamp从当前时间戳生成 MySQL 每小时细分
【发布时间】:2011-11-14 12:58:41
【问题描述】:

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

我有一张表,其中存储了不同人进行的活动的数量,以及它发生的时间。

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

我该怎么做?

(示例中的小时顺序无关)

【问题讨论】:

  • 你应该在你的应用逻辑中处理这个问题。
  • 如果当前时间是 5:30,您希望第一个小时是从 4:30 到 5:30 还是从 5 到 5:30?

标签: mysql sql reporting-services time timestamp


【解决方案1】:

您可以创建一个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;

【讨论】:

  • @ajreal 抱歉,由于某种原因,我无法让 COALESCE 函数返回零。 SELECT hourly.hour, COALESCE(activities, 0) FROM hourly LEFT JOIN tbl1 ON hourly.hour=hour(Timestamp) WHERE timestamp >= DATE_SUB(NOW(), INTERVAL 24 HOUR) AND Name = ? GROUP BY hour(timestamp) ORDER BY hourly.hour 仍然只返回活动存在的时间。
  • 把 GROUP BY 换成 hourly.hour 怎么样?
  • @ajreal 都试过了。两者都不起作用。我必须提到我正在总结活动,但没有总和的尝试也行不通。我正在使用 MySQL 5.5.8 可能出了什么问题?
  • 再次更新,下次请提供更多详细信息。它不起作用并没有真正的帮助......
  • 表示每小时左加入(选择您的表分组)
猜你喜欢
  • 2010-09-11
  • 1970-01-01
  • 1970-01-01
  • 2011-05-31
  • 2022-01-06
  • 1970-01-01
  • 2015-03-02
  • 2016-05-16
  • 1970-01-01
相关资源
最近更新 更多