【问题标题】:SQL query to obtain an Average value for set periods of timeSQL查询以获取设定时间段的平均值
【发布时间】:2011-06-23 16:20:21
【问题描述】:

我有一个 MySQL 数据库,用于存储功率读数,每分钟添加一次读数。 (即每天 1,440 个读数)。

time      power
----      -----
00:00:00    346
00:01:00    352
00:02:00    247

使用 PHP 我想根据这些数据生成一个图表,但我不希望图表上有 1,440 个点。我可能会选择把它分成 15 分钟的小块(这会给我 96 分)。另外,我不想简单地取每十五个值,因为这会产生误导性的结果。我想要做的是使用一个 SQL 查询,它以 15 分钟的块返回数据,并给出平均功率读数。

输出可能如下所示:

starttime   avgpower
---------   --------
00:00:00         342
00:15:00         490
00:30:00         533

是否有可以为我执行此操作的 SQL 函数?还是我必须在我的 PHP 代码中执行这个计算?

【问题讨论】:

    标签: mysql math average


    【解决方案1】:

    这是您的查询:

    SELECT STR_TO_DATE(CONCAT(DATE_FORMAT(`time`, '%H'), ':', (FLOOR(DATE_FORMAT(`time`, '%i') / 15) * 15), ':00'), '%H:%i:%s') `starttime`, AVG(`power`) `avgpower`
    FROM `tablea`
    GROUP BY `starttime`;
    

    请根据您的架构随意替换表 (tablea) 和列 (timepower) 名称。

    希望这会有所帮助。

    【讨论】:

      【解决方案2】:

      您可以按分钟/4 的舍入值分组,然后选择功率读数字段的平均值。您可能更喜欢使用 floor 函数而不是四舍五入的分钟数。

      【讨论】:

        【解决方案3】:

        有同样的问题。正如Don Kirkby 指出的那样,我用这段代码解决了它:

        SELECT time, AVG(power) AS avgpower,  ROUND(UNIX_TIMESTAMP(time)/(15*60)) AS timekey
        FROM table
        GROUP BY timekey
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-09-07
          • 2013-12-10
          • 2015-04-25
          • 2021-05-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-11-02
          相关资源
          最近更新 更多