MySQL 生成当日的24小时

在很多应用程序中,我们需要统计数据库中某个表在当日不同小时的数据量。这对于分析用户的活动情况、监控系统的负载以及其他一些数据分析场景都非常有用。本文将介绍如何使用 MySQL 来生成当日的24小时数据统计报表,并提供相应的代码示例。

1. 准备工作

在开始之前,我们需要创建一个测试用的表,并插入一些模拟数据。我们可以创建一个名为 logs 的表,包含两个字段:idcreated_atid 为自增主键,created_at 为记录创建时间的字段。

下面是创建表的 SQL 语句:

CREATE TABLE logs (
  id INT AUTO_INCREMENT PRIMARY KEY,
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

为了方便测试,我们可以插入一些模拟数据。下面是一个例子:

INSERT INTO logs (created_at) VALUES
  ('2022-06-01 08:12:34'),
  ('2022-06-01 09:23:45'),
  ('2022-06-01 10:34:56'),
  ('2022-06-01 11:45:01'),
  ('2022-06-01 12:56:12'),
  ('2022-06-01 13:07:23'),
  ('2022-06-01 14:18:34'),
  ('2022-06-01 15:29:45'),
  ('2022-06-01 16:40:56'),
  ('2022-06-01 17:51:01'),
  ('2022-06-01 18:02:12'),
  ('2022-06-01 19:13:23'),
  ('2022-06-01 20:24:34'),
  ('2022-06-01 21:35:45'),
  ('2022-06-01 22:46:56'),
  ('2022-06-01 23:57:01');

2. 生成当日的24小时统计报表

为了生成当日的24小时统计报表,我们需要使用 MySQL 的日期函数和分组函数。具体过程如下:

  1. 使用 DATE() 函数提取 created_at 字段的日期部分。
  2. 使用 HOUR() 函数提取 created_at 字段的小时部分。
  3. 使用 GROUP BY 子句按日期和小时进行分组。
  4. 使用 COUNT() 函数统计每个分组的数据量。

下面是相应的 SQL 查询语句:

SELECT DATE(created_at) AS date, HOUR(created_at) AS hour, COUNT(*) AS count
FROM logs
WHERE DATE(created_at) = CURDATE()
GROUP BY DATE(created_at), HOUR(created_at)
ORDER BY DATE(created_at), HOUR(created_at);

执行以上 SQL 查询语句后,将会得到如下结果:

+------------+------+-------+
| date       | hour | count |
+------------+------+-------+
| 2022-06-01 |    8 |     1 |
| 2022-06-01 |    9 |     1 |
| 2022-06-01 |   10 |     1 |
| 2022-06-01 |   11 |     1 |
| 2022-06-01 |   12 |     1 |
| 2022-06-01 |   13 |     1 |
| 2022-06-01 |   14 |     1 |
| 2022-06-01 |   15 |     1 |
| 2022-06-01 |   16 |     1 |
| 2022-06-01 |   17 |     1 |
| 2022-06-01 |   18 |     1 |
| 2022-06-01 |   19 |     1 |
| 2022-06-01 |   20 |     1 |
| 2022-06-01 |   21 |     1 |
| 2022-06-01 |   22 |     1 |
| 2022-06-01 |   23 |     1 |
+------------+------+-------+

这样,我们就得到了当日每个小时的数据量统计报表。

3. 完整代码示例

下面是完整的代码示例,包含创建表、插入数据和生成统计报表的过程:

-- 创建表
CREATE TABLE logs (
  id