Uma visão materializada seria uma ótima opção para o que você está procurando fazer. Dessa forma, você pode escrever a consulta uma vez para a exibição e, em seguida, fazer com que os dados na exibição materializada sejam atualizados com a frequência que desejar. Você pode ter um trabalho que atualize os dados uma vez por noite, nos fins de semana ou em qualquer frequência que você escolher.
Após a criação da visualização materializada, você também pode adicionar índices sobre a visualização materializada para auxiliar no desempenho da consulta, se assim desejar.
Um exemplo rápido de como criar uma visualização materializada pode ser visto abaixo.
CREATE TABLE sale
(
product_id NUMBER,
sale_date DATE,
sale_amount NUMBER
);
INSERT INTO sale (product_id, sale_date, sale_amount)
VALUES (124, DATE '2019-02-01', 40.25);
INSERT INTO sale (product_id, sale_date, sale_amount)
VALUES (124, DATE '2019-02-01', 80.99);
INSERT INTO sale (product_id, sale_date, sale_amount)
VALUES (124, DATE '2020-02-01', 30.50);
INSERT INTO sale (product_id, sale_date, sale_amount)
VALUES (124, DATE '2020-02-01', 46.75);
CREATE MATERIALIZED VIEW sales_summary
BUILD IMMEDIATE
REFRESH FORCE ON DEMAND
AS
SELECT product_id,
SUM (sale_amount) AS annual_sales,
MAX (sale_amount) AS max_price,
MIN (sale_amount) AS min_price,
EXTRACT (YEAR FROM sale_date) AS year
FROM sale
GROUP BY product_id, EXTRACT (YEAR FROM sale_date);
Resultado
select * from sales_summary;
PRODUCT_ID ANNUAL_SALES MAX_PRICE MIN_PRICE YEAR
_____________ _______________ ____________ ____________ _______
124 121.24 80.99 40.25 2019
124 77.25 46.75 30.5 2020