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