3

我试图找到两个日期之间的值的总和,在这种情况下,我总是希望保持一个日期不变。示例查找日期 4 月到 7 月之间的值,保持 4 月不变,因此另一种情况可能是日期 4 月到 5 月之间的值的总和,再次保持 4 月不变。我一直在处理几个查询很长一段时间但没有成功这样做你能看看下面的SQLFiddle帮助我吗我真的很感激帮助

4

1 回答 1

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

然后,如果要更改日期范围,可以传入结束日期的值并将其设为变量。

于 2012-08-30T02:56:58.880 回答