我正在运行一个数据库,它每分钟都会存储新数据。因此,在一小时内有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"];
}
}
有人可以帮帮我吗?我在这里失利了。提前谢谢。
答案 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"];
}