2017-10-09 34 views
0

結果、私は販売の日付間の平均日数を計算する必要があります。計算平均

私のDBを、このようなものです。だから私は日のデ差(CREATION_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など...

と結果の数に応じて日の平均を計算します。

だから私はこの小さなスクリプトを使用して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)に変更するだけです。

...これはすべて、dbデザイナが正常であり、実際に日付値の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'