【问题标题】:MySQL calculate Averge each 15 minutesMySQL 每 15 分钟计算一次平均值
【发布时间】:2019-02-21 06:50:54
【问题描述】:

您好,我有一张这样的桌子:

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)

【问题讨论】:

  • 你的 MySQL 版本是多少?
  • 继续。尝试一下。
  • 并定义您的范围边界 - 例如,15 分钟是否从 11:49:41(或 11:45)开始?
  • 创建 MySql 事件调度器。

标签: sql date datetime group-by mariadb


【解决方案1】:

您可以将time 截断为 15 分钟边界(将秒数归零,减去分钟 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-17
    • 2017-09-11
    • 1970-01-01
    • 2017-03-14
    • 2021-06-19
    • 2019-12-18
    • 2021-06-16
    • 2020-04-25
    相关资源
    最近更新 更多