PHP - MYSQL:每月最后12个月的第一天到最后一天

问题描述:

我所在的项目需要获得过去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

可以使用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)