Перепишите в один запрос. Вот у Вас общая часть: ( SELECT id FROM card_fireregistration AS cr WHERE (cr.soato BETWEEN beginsoato AND endsoato) AND (cr.fire_date BETWEEN begindate AND enddate) AND cr.event_type = 1 AND cr.state ) Её можно вынести в WITH или сделать подзапросом. Кроме того, все запросы, кроме последнего, у Вас имеют вид: SELECT COUNT(*) FROM card_firedeathsapplication AS cda WHERE fire_registration_id IN <общая часть> AND <условия> Эти условия можно перенести в FILTER соответствующих COUNT, и затем все запросы объединить в один. (Вообще, это большей частью механическая работа, требуется только аккуратно переписать.)
Обсуждают сегодня