gpt4 book ai didi

php - 两个日期之间每天的算术平均值

转载 作者:行者123 更新时间:2023-11-29 11:30:00 25 4
gpt4 key购买 nike

我目前正在从表中获取两个日期之间的所有值。每天的值并不总是相同,我需要对两个日期之间的值每天进行算术平均值(不确定这是否是正确的术语)。

例如:

这是我的表格的一些元素

['lig']   ['date']
170 2016-05-26
190 2016-05-26
192 2016-05-26
196 2016-05-25
181 2016-05-25
187 2016-05-25
195 2016-05-25

我需要做这样的事情:

平均第 26 天:170+190+192/3= 184
平均第 25 天:196+181+187+195/4 = 189,75



这就是我获取日期之间所有值的方式。

function listDates($table, $beginDate, $endDate){ 
$select = "SELECT * FROM $tabela WHERE date >= :beginDate AND date <= :endDate ORDER BY date";
$inst = $this->liga->prepare($select);
$inst->bindParam(':beginDate', $begin);
$inst->bindParam(':endDate', $end);
$inst->execute();
return $inst->fetchAll();

}

这就是我获取所需日期间隔并列出该间隔之间的值的方法

$previous_week = strtotime("-1 week");
$today = strtotime("-1 day");

$start_week = strtotime("today", $previous_week);
$end_week = strtotime ("next day", $today);

$start_week = date("Y-m-d H:i:s", $start_week);
$end_week = date("Y-m-d H:i:s", $end_week);

$values = $listValues->listDates("meanVal",$start_week,$end_week);

foreach($values as $val){

echo $val['lig'];
echo $val['tip'];
echo $val['hum'];
echo $val['date'];
}

但是我如何进行计数(?)以获得每天的平均值?有人可以帮助我吗?不确定这是否明确,英语不是我的母语,有时我不知道如何解释一些东西。非常感谢。

最佳答案

我会给你sql,让你自己弄清楚php部分:

select *,avg(lig) as day_mean 
from table
where date >= begindate and date <= enddate
group by date
order by date

这里的关键是group by子句,group by将为后面的每个不同值应用聚合函数(这里是avg)(日期)。

分组依据可以按第一个字段对多个字段进行分组,按第二个字段对相等值进行分组,等等。

有许多聚合函数可以与group by一起使用,例如avg、sum、max、count、min等。

这里有一些注释:
1-我留下了*,因为我认为你需要其他数据,如果你只需要平均值,只需将其删除即可。
2-前面代码中的 as 关键字用于命名平均值(否则其名称将是 avg(lig)),这是为了在 php 部分更好地命名但它还有另一个目的:如果您只想要大于 X 的平均值怎么办?或者有什么限制吗?然后你可以通过在前面的代码末尾添加 having day_mean>X 来实现这一点(你可以在having之后放置你可以在where之后放置的内容,但它仅用于聚合列,where 不能用于这些列)。
3-在分组之前应用where子句,这意味着mysql将首先选择满足where子句的行,然后对它们进行分组,这非常重要,因为这样聚合函数仅应用于选定的行,而不应用于整个表。

关于php - 两个日期之间每天的算术平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37572875/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com