2017-10-09 29 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'