计算MySQL结果之间的平均值

时间:2017-10-09 22:37:19

标签: php mysql date

我需要计算销售日期之间的平均天数:

我的数据库是这样的:

id | customer | creation_date | payment_date
1  |     234  |  2017/07/6    |  2017/07/8 
34  |     234  |  2017/08/4    |  2017/08/10 
53  |     234  |  2017/09/15   |  2017/09/17 
67  |     234  |  2017/10/1    |  2017/07/6 

所以我需要计算订单1和订单34,订单34和订单53,订单53和订单67等之间的天数差异(creation_date)等。

并根据结果数计算AVG天数。

所以我知道如何使用这个小脚本计算两个日期之间的天数差异:

$seconds=strtotime($date1) - strtotime($date2); 
$difference=intval($seconds/60/60/24); 
$positive = $difference * -1;

但我不知道如何获取las结果的日期并将其与下一个结果进行比较。

请有人帮我解决这个谜。谢谢!

3 个答案:

答案 0 :(得分:3)

我可能会误解你在寻找什么,但我认为这样的事情应该有用

(TO_DAYS(MAX(creation_date))-TO_DAYS(MIN(creation_date))) / (COUNT(1)-1)

这将获得第一个和最后一个之间的总天数;并除以订单之间的“空格”数量。

修改:....如果您希望在与同一订单相同的日期处理订单,则只需将COUNT(1)更改为COUNT(DISTINCT creation_date)

...所有这些都假设数据库设计师理智,实际上使用DATE数据类型作为日期值。

总而言之,跨度大小的平均值应与总跨度除以跨度数相同。

答案 1 :(得分:0)

您可以使用循环外部的变量跟踪以前的结果以获取MySQL表,然后在表的各行中运行循环:

$last_positive = 0;
while ($row = $result->fetch_assoc()){
    $date1 = $row['creation_date'];
    $date2 = $row['payment_date'];
    $seconds=strtotime($date1) - strtotime($date2); 
    $difference=intval($seconds/60/60/24); 
    $positive = abs($difference);
    //DO SOME COMPARISON HERE
    echo($last_positive >= $positive);

    $last_positive = $positive;
}

我还建议使用abs来获取绝对值,而不是乘以-1。

答案 2 :(得分:0)

解决了这个问题:

SELECT DATEDIFF(MAX(creation_date), MIN(creation_date)) / (COUNT(creation_date) - 1) AS SaleAverage FROM table WHERE customer = '$customer'