尝试在一小时内取平均值 60 点,然后在图形中输出


Trying to take the average of 60 points in an hour, then output in graph

我有一个正在运行的数据库,它每分钟存储一次新数据。因此,在一小时内有60个条目。从这些条目中,我正在尝试生成每小时的平均值(使用时间戳),但我还没有最微弱的方法来做到这一点。

这是我的MySQL选择代码,用于获取上一小时的所有数据:

$value = "SELECT `brutoValue`, `nettoValue`, `regDate`
                    FROM `myDB` 
                    WHERE regDate > DATE_SUB( 
                    CURRENT_TIMESTAMP , INTERVAL 1 HOUR )";
$result = $dbhandle->query($value);

这是我的MySQL代码,用于获取上周的所有数据(一周168小时,对吧?

$valueWeek = "SELECT `brutoValue`, `nettoValue`, `regDate`
                    FROM `myDB` 
                    WHERE regDate > DATE_SUB( 
                    CURRENT_TIMESTAMP , INTERVAL 168 HOUR )";
$resultWeek = $dbhandle->query($valueWeek);

后者呈现了一个包含 10080 个条目 (168 * 60) 的广泛列表。我需要的是,每小时将 60 个条目相加,除以 60,并将结果添加到过去 168 小时的平均值数组中。

虽然我在最后一个小时让它工作,但我无法弄清楚如何取平均值。这是将过去一小时的值存储到数组中的代码,我可以将其用于我的图形:

if ($result->num_rows > 0) {
        // output data of each row
        while($row = $result->fetch_assoc()) {
            $dateArray[] = $row["regDate"];
            $brutoVal[] = $row["brutoValue"];
            $nettoVal[] = $row["nettoValue"];
        } 
    }

谁能帮我?我在这里不知所措。提前谢谢。

您可以使用 mysql 的日期函数按日期和时间进行分组。 请注意末尾的 GROUP BY 子句和列中的 AVG() 用法。

$valueWeek = "SELECT AVG(`brutoValue`) AS `brutoValue`, AVG(`nettoValue`) AS `nettoValue`, CONCAT(DATE(`regDate`), '_', HOUR(`regDate`)) AS `date_hour`
                    FROM `myDB` 
                    WHERE regDate > DATE_SUB( 
                    CURRENT_TIMESTAMP , INTERVAL 168 HOUR )
                    GROUP BY DATE(`regDate`), HOUR(`regDate`)";

您的返回数据应该在一天中的每一小时(即在数据库中)都有一行,并具有 bruto 和 netto 的平均值。

编辑:稍微更改了上面的mysql,使其具有date_hour的串联值,类似于2016-02-08_17,因此您可以在while循环期间将数据输出到数组中(以匹配以前的设置),例如:

while($row = $result->fetch_assoc()) {
    $dateArray[] = $row["date_hour"];
    $brutoVal[] = $row["brutoValue"];
    $nettoVal[] = $row["nettoValue"];
}