Я хочу изменить этот конкретный простой запрос на выборку в CTE, чтобы оптимизировать его, поскольку этот простой три запроса на выборку занимает 4 минуты и, следовательно, я хочу сократить время его выполнения, преобразовав его в запрос CTE.
select sum(AMOUNT) usd from data where status IN ('ACCEPTED','REJECTED','CANCELLED') and date between '01-SEP-18' and '30-NOV-18'
UNION
select sum(AMOUNT) usd from data where status IN ('ACCEPTED','REJECTED','CANCELLED') and date between '01-NOV-18' and '31-JAN-19'
UNION
select sum(AMOUNT) usd from data where status IN ('ACCEPTED','REJECTED','CANCELLED') and date between '01-FEB-19' and '30-APR-19'
ORDER BY usd DESC ;
Ожидаемый результат должен состоять из одного столбца, показывающего результат трех запросов, который является суммой в виде usd от суммы в этом запросе.
Пример:
USD
100 (timeline 1)
200 (timeline 2)
300 (timeline 3)
Тот, который я пробовал: Можете ли вы преобразовать этот запрос CTE с помощью суммы вместо количества.
WITH cte AS (
SELECT
COUNT(CASE WHEN status_date BETWEEN '2018-11-01' AND '2019-01-31' THEN 1 END) AS cnt1,
COUNT(CASE WHEN status_date BETWEEN '2019-02-01' AND '2019-04-30' THEN 1 END) AS cnt2,
COUNT(CASE WHEN status_date BETWEEN '2019-05-01' AND '2019-07-31' THEN 1 END) AS cnt3
FROM data
WHERE status IN ('ACCEPTED', 'REJECTED', 'CANCELLED')
)
SELECT cnt1 FROM cte
UNION ALL
SELECT cnt2 FROM cte
UNION ALL
SELECT cnt3 FROM cte;