试图在一小时内取平均60分,然后以图形输出

时间:2016-02-08 16:22:33

标签: php mysql

我正在运行一个数据库,它每分钟都会存储新数据。因此,在一小时内有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"];
        } 

    }

有人可以帮帮我吗?我在这里失利了。提前谢谢。

1 个答案:

答案 0 :(得分:0)

您可以使用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"];
}