Нужна помощь в оптимизации приведенного ниже запроса. Цель состоит в том, чтобы получить количество a.subscriber_no, которые попадают в каждый сегмент, на основе их tbl1.duration (продолжительность контракта 0/24 / 1-23 /> 24). Я могу выполнить запрос без COUNT, и он извлекает 22 миллиона записей. С COUNT я получаю ошибку: ORA-02393: превышен лимит вызовов при использовании процессора. Любые идеи о том, как оптимизировать / обойти это? Гуглил / переписывал это несколько дней.
SELECT
COUNT(CASE WHEN tbl1.duration = 0 then 1 ELSE NULL END) as "0 term",
COUNT(CASE WHEN tbl1.duration = 24 then 1 ELSE NULL END) as "24 term",
COUNT(CASE WHEN tbl1.duration between 1 and 23 then 1 ELSE NULL END) as "term >0 and <24",
COUNT(CASE WHEN tbl1.duration > 24 then 1 ELSE NULL END) as "term > 24"
from
(Select
a.subscriber_no,
max(b.commit_start_date),
max(b.commit_end_date),
round (months_between(to_date(max(b.commit_end_date)),to_date(max(b.commit_start_date))),0) as duration,
max(b.EFFECTIVE_DATE)
from sales a
join contract b on a.subscriber_no = b.subscriber_no
join subscriber c on a.subscriber_no = c.subscriber_no
where a.type = 'F'
and c.sub_status = 'Y'
group by
a.subscriber_no) tbl1;```