sql - MySQL 每 15 分钟计算一次平均值
问题描述
嗨,我有一张像这样的桌子:
CREATE TABLE `data` (
`time` DATETIME NOT NULL.
`cpu` DECIMAL(10, 4) UNSIGNED NOT NULL
)
我每 10 秒排一次,例如:
time cpu
2018-09-12 11:49:41 0.200
2018-09-12 11:49:51 0.100
2018-09-12 11:50:01 0.200
2018-09-12 11:50:11 0.301
2018-09-12 11:50:21 0.100
2018-09-12 11:50:31 0.000
2018-09-12 11:50:41 0.200
2018-09-12 11:50:51 0.100
2018-09-12 11:51:01 0.100
2018-09-12 11:51:11 0.400
2018-09-12 11:51:21 0.000
2018-09-12 11:51:31 0.000
2018-09-12 11:51:41 0.300
2018-09-12 11:51:51 0.300
2018-09-12 11:52:01 0.300
2018-09-12 11:52:11 0.200
2018-09-12 11:52:21 0.000
2018-09-12 11:52:31 0.200
2018-09-12 11:52:41 0.100
2018-09-12 11:52:51 0.200
2018-09-12 11:53:01 0.801
2018-09-12 11:53:11 0.100
2018-09-12 11:53:21 0.200
2018-09-12 11:53:31 0.200
2018-09-12 11:53:41 0.100
我想每 15 分钟计算一次 CPU 平均值。我该怎么做?
提前致谢!!!
我在用着:
MariaDB [(none)]> SELECT VERSION();
+----------------------------------+
| VERSION() |
+----------------------------------+
| 10.1.30-MariaDB-0ubuntu0.17.10.1 |
+----------------------------------+
1 row in set (0.00 sec)
解决方案
您可以将 15 分钟的边界截断time
(将秒数归零,减去分钟 mod 15 分钟),然后按结果值分组:
SELECT clamped_time, AVG(cpu) AS average_cpu
FROM (
SELECT
time
- INTERVAL EXTRACT(SECOND FROM time) SECOND
- INTERVAL EXTRACT(MINUTE FROM time) % 15 MINUTE AS clamped_time,
cpu
FROM data
) AS sq
GROUP BY clamped_time
推荐阅读
- c++ - 如何将有向图(邻接表)传递到 Dijkstra Algorithm Boost 中以找到最短路径?
- algorithm - 创建曲线包络(非信号应用)
- c# - Windows 窗体 C# 如何制作正方形图表的网格线?
- c++ - char 字符串不起作用 "\0" 有什么问题
- c++ - 在结构中声明一个常量变量会导致我出现此错误非静态成员引用必须相对于特定对象
- bash - 如何在 bash 脚本中使用 '\n' 连接所有行
- javascript - 在 Javascript 中将货币转换为整数
- tensorflow - 为什么直接比较 tensorflow 的准确率比 keras 差?
- java - java 8 stream api如何在一系列转换中访问先前的转换对象
- mysql - 一段时间后,带有 Kafka 的 Debezium Mysql 连接器未读取 Db 更改,为什么?