You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在MySQL中查询最近7天内间隔5分钟的无秒级时间数据

实现5分钟间隔、无秒数的最近7天数据查询

当然可以搞定!我来帮你梳理实现思路和具体的SQL语句,核心要解决两个问题:把带秒的时间规整成5分钟间隔的无秒格式,以及筛选最近7天的数据,同时对每个时间区间的value做聚合计算(你的示例里应该是对区间内的数值做了某种统计,我会给出通用方案,你可以按需调整)。

假设你的表名叫your_table,下面分不同数据库类型给出具体实现:

通用思路(适配多数数据库)

我们需要先把每个时间戳映射到它所属的5分钟区间起始点(比如2020-02-28 08:30:20要归到2020-02-28 08:302020-02-28 08:30:35归到2020-02-28 08:35),然后按这个规整后的时间分组,再筛选最近7天的数据。

MySQL 实现

SELECT
  -- 将时间转成5分钟间隔的无秒格式
  DATE_FORMAT(
    FROM_UNIXTIME(FLOOR(UNIX_TIMESTAMP(time)/300)*300),
    '%Y-%m-%d %H:%i'
  ) AS time,
  -- 这里替换成你需要的聚合逻辑:SUM/AVG/MAX等,示例用平均值
  AVG(value) AS value
FROM your_table
-- 筛选最近7天的数据
WHERE time >= NOW() - INTERVAL 7 DAY
-- 按5分钟区间分组
GROUP BY FLOOR(UNIX_TIMESTAMP(time)/300)
ORDER BY time;

简单解释下:UNIX_TIMESTAMP(time)把时间转成秒数,除以300(5分钟=300秒)取整再乘回去,就得到了该时间所在5分钟区间的起始秒数,再转成带分钟的时间格式,就去掉了秒数。

PostgreSQL 实现

PostgreSQL可以用更直观的时间函数来处理:

SELECT
  -- 计算5分钟区间的起始时间
  date_trunc('hour', time) + INTERVAL '5 minutes' * FLOOR(date_part('minute', time)/5) AS time,
  AVG(value) AS value
FROM your_table
WHERE time >= CURRENT_TIMESTAMP - INTERVAL '7 days'
GROUP BY date_trunc('hour', time) + INTERVAL '5 minutes' * FLOOR(date_part('minute', time)/5)
ORDER BY time;

这里先把时间截断到小时,再根据分钟数计算所属的5分钟区间,比如8点32分就会被归到8点30分这个区间。

SQL Server 实现

如果用SQL Server,用DATEADDDATEDIFF来处理时间分组:

SELECT
  DATEADD(MINUTE, DATEDIFF(MINUTE, 0, time)/5*5, 0) AS time,
  AVG(value) AS value
FROM your_table
WHERE time >= DATEADD(DAY, -7, GETDATE())
GROUP BY DATEADD(MINUTE, DATEDIFF(MINUTE, 0, time)/5*5, 0)
ORDER BY time;

针对你的测试数据验证

用你给出的原数据:

+----------------------+-------+
| time | value |
+----------------------+-------+
| 2020-02-28 08:30:20 | 30 |
| 2020-02-28 08:30:25 | 15 |
| 2020-02-28 08:30:30 | 30 |
| 2020-02-28 08:30:35 | 10 |
+----------------------+-------+

如果用MySQL的语句+取平均值,结果会是:

timevalue
2020-02-28 08:3025
2020-02-28 08:3510

你的示例里08:35的value是5,应该是需要自定义的聚合逻辑(比如SUM(value)/2或者其他规则),你只需要把AVG(value)替换成你需要的计算方式就行。

内容的提问来源于stack exchange,提问作者user12500086

火山引擎 最新活动