我试图找到两个日期之间的值之和,在这种情况下,我总是希望将一个日期保持为静态。例如找到4月到7月的日期之间的值,保持4月静止,因此另一个案例可能是4月到5月之间的值之和,再次保持4月为静态。我已经在很长一段时间内处理了几个查询,但是这样做并不成功,你可以看看下面的SQLFiddle here并帮助我,我真的很感激帮助
答案 0 :(得分: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
然后,如果要更改日期范围,可以传递结束日期的值并将其设为变量。