2012-08-30 119 views
3

我試圖找到在這種情況下兩個日期之間的值的總和,我總是想保持一個日期靜態。查找四月到七月的日期值,保持四月份爲靜態值,因此,另一種情況可能是四月到五月之間的值的總和,再次保持四月靜態。我一直在幾個查詢相當一段時間,但沒有帶過SUCESSFUL這樣做,你可以看看下面的SQLFiddle here和幫助我,請我真的很感激幫助計算日期間隔之間的總和mysql

+0

什麼是所有案件的東西?爲什麼不只是'SUM(列)WHERE datecolumn BETWEEN'2012-04-01'和'2012-06-01''? –

+0

我想寫一個SUM(列)WHERE datecolumn BETWEEN'2012-04-01'和'2012-06-01'使用一個案例,因爲我已經在前面的那個 – dames

+0

然後寫那個。 SUM(如果datecolumn'2012-04-01'和'2012-06-01'那麼valuecolumn ELSE 0 END)',將僅添加這些日期之間的行中的值。 –

回答

5

爲什麼不添加其他CASE聲明:

sum(case when pay_date between '2012-04-01' and '2012-06-01' 
     then amount end) range_amount 

所以你的查詢是:

SELECT p.name, 
     v.v_name, 
     SUM(CASE 
      WHEN MONTH(py.pay_date) = 4 THEN amount 
      end) april_amount, 
     SUM(CASE 
      WHEN MONTH(py.pay_date) = MONTH(CURDATE()) THEN amount 
      end) current_month_amount, 
     SUM(CASE 
      WHEN MONTH(py.pay_date) = MONTH(CURDATE()) - 1 THEN amount 
      end) previous_month_amount, 
     SUM(CASE 
      WHEN pay_date BETWEEN '2012-04-01' AND '2012-06-01' THEN amount 
      end) range_amount 
FROM persons p 
     LEFT JOIN vehicle v 
       ON p.id = v.person_veh 
     LEFT JOIN payment py 
       ON p.id = py.person_id 
GROUP BY p.name, 
      v.v_name 

看到SQL Fiddle with Demo

然後,如果您想更改日期範圍,則可以爲結束日期傳遞一個值並將其作爲變量。

+0

是的,非常感謝一百萬人的工作。我非常感謝。 – dames

+0

downvoter謹慎解釋? – Taryn

+0

對不起,意外進出口很抱歉,我的網絡連接不好,我認爲我點擊之前,頁面完全刷新 – dames