在 MYSQL 中的 where 子句和 group by 子句中使用 IF 条件

Use IF condition inside where clause in MYSQL and group by clause

db fiddle

在上面link的table中,balance_aftermonths持有每个月之后的余额。 对于当年,我想在当年的每个月之后检查余额,我使用 :

计算
where MONTH(monthlydates) = MONTH(curdate())

但是,对于较旧的日期(例如 2019 年),总余额不应是当月,而是合同中的最后一个月,如下所示:

WHERE YEAR(monthlydates) = YEAR(end_date) AND MONTH(monthlydates) = MONTH(end_date) 

问题:我的问题是,如何在单个查询中容纳这两个?

我不确定我是否理解得很好 试试这个查询

    (select contract_prod , start_date , end_date, MONTH(curdate()) as checkedmonth , 'curdate' as method , sum(balance_aftermonth) 
from contracts_balance 
 where MONTH(monthlydates) = MONTH(curdate()) AND YEAR(monthlydates) = YEAR(curdate())
 group by contract_prod, start_date,end_date )
union all
(select contract_prod , start_date , end_date, MONTH(end_date) as checkedmonth , 'end_date' as method , sum(balance_aftermonth) 
from contracts_balance 
 where YEAR(monthlydates) = YEAR(end_date) AND MONTH(monthlydates) = MONTH(end_date) AND YEAR(monthlydates) != YEAR(curdate())
group by contract_prod, start_date,end_date )