MYSQL/PHP按日期时间加权平均

MYSQL/PHP按日期时间加权平均,php,mysql,Php,Mysql,嗨,我有一个数据库,其中包含以下数据: 表:历史数据 VALUE , DATE 100 , 2010-10-01 00:00:00 105 , 2010-10-01 00:00:05 106 , 2010-10-01 00:00:08 103 , 2010-10-01 00:00:10 如果我用MYSQL做一个简单的平均值,从历史数据中选择平均值作为当前平均值,结果是103.5,这是错误的,因为我需要一个基于日期时间的加权平均值,从2010-10-01 00:00:05到201

嗨,我有一个数据库,其中包含以下数据:

表:历史数据

VALUE , DATE
100   , 2010-10-01 00:00:00
105   , 2010-10-01 00:00:05
106   , 2010-10-01 00:00:08
103   , 2010-10-01 00:00:10
如果我用MYSQL做一个简单的平均值,从历史数据中选择平均值作为当前平均值,结果是103.5,这是错误的,因为我需要一个基于日期时间的加权平均值,从2010-10-01 00:00:05到2010-10-01 00:00:07,该值仍然等于105

在数学中执行此操作的正确操作是:

$values = [100,100,100,100,105,105,105,106,106,103];

echo array_sum($values) / count($values);
结果:103是正确的

我创建了两个数组,一个带有值和日期索引,另一个在php中只带有日期间隔。然后我把它合并,然后再处理。。。但这会让资源变得昂贵。。。。在生产中,我需要加权平均12小时。43200秒

哪种方法最有效

您可以使用滞后函数并将权重乘以其值。 您可以使用mysql

select sum(value)/count(*)
from my_table 
where date between now and DATE_SUB(NOW(), INTERVAL 12 HOUR)

至少最有效的方法是用PHP实现

    $current_avg = $current_avg->fetchAll(PDO::FETCH_ASSOC);
    $last_util_value = "";
    $last_util_date = "";
    $final_avg_array = array();
    foreach ($current_avg as $key => $value) {
        if(empty($last_util_value)){
            $last_util_value = $value["val_ask"];
            $last_util_date = strtotime($value["Date"]);
            $second_time = $last_util_date - $past_time_second;
        }else{
            $second_time = strtotime($value["Date"]) - $last_util_date;
        }

        if($second_time > 0){
            for ($i = 1; $i <= $second_time; $i++) {
                array_push($final_avg_array,$value["val_ask"]);
            }
        }
        $last_util_value = $value["val_ask"];
        $last_util_date = strtotime($value["Date"]);
    }
   }
  //6366.26937251
  $avg = array_sum($final_avg_array) / count($final_avg_array);

我已经测试了你的查询,但不起作用。。。仍然结果103.5而不是103您是否有任何支持您的开场白的证据?请参阅