2011-07-06 53 views
1

我的應用程序存儲客戶完成的付款。在每個月的月底,計算當月支付的總額並提供給所有者:我有一個支付表,其中包含以下字段(最重要)。MySQL在最近12個月內獲取付款演變圖的查詢

ID,datepaid,ENDINGDATE(實際月的截止日期),ammount的,類型,代碼,...

現在,有一年支付,我一直要求創建款項的圖最近12個月的進化(總計)。

通過閱讀等這是我得到的查詢,,但我不知道如何獲得最新的12個月總計(並獲得0,以防未付款完成當月)... 。

SELECT id, endingdate, datepaid, SUM(ammount) AS total 
    FROM `sis_payments` 
    WHERE endingdate >= DATE_SUB(CURDATE() , INTERVAL 1 YEAR) 
    GROUP BY endingdate 

我知道這可能會被嚴重設計的,但它是我得到了什麼...任何線索?謝謝

回答

1

你可以嘗試GROUP BY YEAR(endingdate), MONTH(endingdate),或使用DATE_FORMAT等價物。看看Mysql documentation for DATE_FORMAT

此外,不要在SELECT子句中包含日期字段(endingdate,datepaid)。相反,使用YEAR(endingdate), MONTH(endingdate),就像在GROUP BY中一樣。

當沒有付款的那個月在SQL中稍微複雜一點時得到0。運行查詢後,您可以在PHP中處理該問題。

UPDATE

實施例使用DATE_FORMAT:

SELECT 
    DATE_FORMAT(mrendido,'%y-%m') as xyearmonth, 
    SUM(FORMAT(ammountpaid,2)) AS ammtotal 
FROM sis_pyments 
WHERE mrendido >= DATE_SUB(CURDATE(), INTERVAL 1 YEAR) 
GROUP BY xyearmonth 
ORDER BY xyearmonth ASC 
+0

與此查詢解決:SELECT DATE_FORMAT(mrendido, '%M')爲xmonth,DATE_FORMAT(mrendido, '%Y')作爲xyear ,SUM(FORMAT(ammountpaid,2))AS ammtotal FROM sis_pyments \t WHERE mrendido> = DATE_SUB(CURDATE(),間隔1年) GROUP BY xmonth,xyear ORDER BY xyear,xmonth ASC – Enrique

+0

除非需要顯示月份和一年分開,您可以使用'DATE_FORMAT'使您的查詢更加簡潔。我正在用示例更新我的原始答案。 – bfavaretto

+0

哇,沒注意到。使用date_format連接月份+年份,並通過此生成的字段進行分組變得更容易。謝謝! – Enrique

相關問題