2015-02-10 229 views
0

我所在的項目需要獲得過去12個月的平均發票總額。我可以通過執行12個查詢(每個月1個)來輕鬆獲得所需內容,但它非常難看,我最終得到了12個獨特變量(id有一個循環),而且我知道有一個更好的方法。PHP - MYSQL:每月最後12個月的第一天到最後一天

能以最好的方式任何人的幫助,以獲得以下內容:

SELECT AVG(invoice_total) FROM invoice WHERE date between '2015-01-01' AND '2015-01-31' 
SELECT AVG(invoice_total) FROM invoice WHERE date between '2015-02-01' AND '2015-02-28' 
SELECT AVG(invoice_total) FROM invoice WHERE date between '2015-03-01' AND '2015-03-31' 

等等

IM在一個圖表描繪這些,所以我需要每個月的數據點。

最終的結果會是這樣的:

Jan: $2323 
Feb: $3523 
March: $6453 

等...但會開始12個月前從目前的月份。

謝謝。

P.S.對於參考,這是我如何繪製過去90天:

$get_unconfirmed_appointments = " 
SELECT total 
    , invoice_date 
    FROM invoice 
WHERE clinic_id = 20 
    AND invoice_date >= '$date' 
    AND invoice_date <= '$date_two' 
ORDER 
    BY invoice_date ASC 
"; 
     $result = $conn->query($get_unconfirmed_appointments) or die($conn->error.__LINE__);  
      while($row = $result->fetch_assoc()) { 
        $totals[$row['invoice_date']][] = $row['total']; 
      } 
    $sub_arrays = array_chunk($totals, 3); 
    foreach ($sub_arrays as $threedays) { 
     foreach ($threedays as $value) { 
      foreach ($value as $val) { 
       $all[] = $val; 
      }         
     } 
     $average = array_sum($all)/count($all); 
     $data_point=round($average,2); 
     plot($data_point); 
    } 

我需要與上述相同的想法,但在過去的12個月。每個月的平均值。

+0

努力呢?對不起,你能詳細說明一下,我不會再犯錯嗎? – Jason 2015-02-10 00:14:43

+0

那麼,'2/29'是什麼?你的數據集是什麼樣的?試過了什麼?你進行了哪些研究? – Strawberry 2015-02-10 00:16:00

+0

我擴大了這個問題。你的第一個評論,你爲什麼投票現在已經沒了,但-1仍然是? – Jason 2015-02-10 00:16:30

回答

0

可以使用MONTHNAME函數和組由:

http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_month 

您SQL將類似的東西:

SELECT AVG(invoice_total), MONTHNAME(invoice_date) FROM invoice WHERE invoice_date BETWEEN '2014-11-11' AND '2015-02-09' GROUP BY MONTHNAME(invoice_date)