Код:
select s.val,c.title,c.comment,c.id,
(b.summa1+b.summa2-b.summa3-b.summa4) balance,sum(REPLACE(data,'type&1%cost&','')) AS abon,
(b.summa1+b.summa2-b.summa3-b.summa4-sum(REPLACE(data,'type&1%cost&',''))) diff,
c.closesumma
from contract c
left join contract_balance b on c.id=b.cid
left join contract_parameter_type_1 s on c.id=s.cid and s.pid=4
LEFT JOIN contract_tariff AS t ON c.id=t.cid AND t.date2 IS NULL
LEFT JOIN tariff_plan AS p ON t.tpid=p.id
LEFT JOIN tariff_tree_link ON tariff_tree_link.tpid=p.id
LEFT JOIN module_tariff_tree ON module_tariff_tree.tree_id=tariff_tree_link.tree_id
LEFT JOIN mtree_node ON mtree_node.mtree_id=module_tariff_tree.id
where b.yy=YEAR(NOW()) and b.mm=MONTH(NOW()) AND mtree_node.type='month_cost' AND s.val<>"" AND c.status=0 AND c.gr IN (128) AND s.val<>0 AND (b.summa1+b.summa2-b.summa3-b.summa4) <=-400
group by c.id
having balance<c.closesumma
balance — Баланс
abon — абонентка которая спишется следующим месяцем
diff — остаток после следующего списания
Более гибкий и информативный )