Используйте условие IF внутри предложения where в MYSQL и предложение group by

#mysql #if-statement #join #group-by #where-clause

Вопрос:

скрипка бд

В таблице, приведенной выше по ссылке, остаток balance_aftermonths удерживается после каждого месяца. В текущем году я хочу проверять остаток средств после каждого месяца в текущем году, который я рассчитываю с помощью :

 where MONTH(monthlydates) = MONTH(curdate())
 

Однако для более старых дат (например, 2019 в примере) общий остаток должен быть не текущим месяцем, а последним месяцем в контракте, что-то вроде этого:

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

ВОПРОС: Мой вопрос заключается в том, как эти два вопроса могут быть объединены в одном запросе?

Ответ №1:

Я не уверен, хорошо ли я понимаю, попробуйте этот запрос

     (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 )