首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >MYSQL/ PHP按日期时间加权平均

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

Stack Overflow用户
提问于 2018-07-21 00:01:15
回答 3查看 171关注 0票数 -1

嗨,我有一个数据库与以下数据:

表:"history_data“

代码语言:javascript
复制
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做一个简单的AVG (从“history_data”中选择AVG(‘CURRENT_AVG’)作为值),结果是"103.5“,这是错误的,因为我需要一个基于日期时间的加权平均值(从2010-10-01 00:00:05到2010-10-01 00:00:07,值仍然等于105)

在数学中这样做的正确操作是:

代码语言:javascript
复制
$values = [100,100,100,100,105,105,105,106,106,103];

echo array_sum($values) / count($values);

结果: 103是对的……

我已经创建了两个数组,一个带有Value和Date index,另一个只有php中的dateinterval。然后我把它合并,在处理之后..。但这对资源来说是昂贵的……(在生产中,我需要加权平均12个小时。43 200秒...)

做这件事最有效的方法是什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-07-21 04:51:09

至少最有效的方法是用PHP

代码语言:javascript
复制
    $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);
票数 0
EN

Stack Overflow用户

发布于 2018-07-21 00:08:15

您可以使用LAG()函数并将权重乘以它的值。LAG()

票数 0
EN

Stack Overflow用户

发布于 2018-07-21 00:08:25

您可以使用mysql

代码语言:javascript
复制
select sum(value)/count(*)
from my_table 
where date between now and DATE_SUB(NOW(), INTERVAL 12 HOUR)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51446405

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档