我需要计算销售日期之间的平均天数:
我的数据库是这样的:
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结果的日期并将其与下一个结果进行比较。
请有人帮我解决这个谜。谢谢!
答案 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'