2017-10-09 32 views
0

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

我的DB是这样的:

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 

所以我需要计算的天德差(CREATION_DATE)之间订单1和订单34,订单34和订单53,订单53和订单67等...

并根据结果数量计算AVG。

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

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

,但我不知道如何利用拉斯维加斯结果的日期和它的下一个比较结果。

请有人谁可以帮助我这个谜。谢谢!

+0

我真的不会用小脚本 – Strawberry

回答

3

我可以误会你在找什么,但我认为这样的事情应该工作

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

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

编辑:....如果您想在同一天处理订单作为单个订单,您可以将COUNT(1)更改为COUNT(DISTINCT creation_date)

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


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

+0

这实际上是一个非常简洁的解决方案打扰。 – fubar

+0

我应该在SQL查询中使用这一行,对吧? –

+0

@GuillermoEsquivel这是意图是的;但如果它更容易,并且您已经拥有代码中记录的单个数据; '(max-min)/(count-1)'数学应该仍然适用于你。 – Uueerdo

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。

+0

如果使用PHP,我倾向于使用'DateTime :: diff'。 – fubar

0

解决这一点:

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