Я бы порекомендовал вам использовать для этой цели нормализованную схему, где вы храните еженедельное и ежемесячное агрегирование в двух разных таблицах с одинаковой структурой. Я не знаю, какие запросы вы будете выполнять, но я полагаю, что это облегчит выполнение любого поиска (когда он будет выполнен правильно !!!).
Возможно, что-то вроде этого образца
product_prices (
prod_code,
price,
date_price_begin
);
sales (
prod_code,
customer_code,
sale_date
);
<aggregate-week>
select trunc(sale_date,'w') as week,
prod_code,
customer_code,
sum(price) keep (dense_rank first order by date_price_start) as price
from sales
natural join product_prices
where sale_date > date_from
group by trunc(sale_date,'iw'),
prod_code,
customer_code
/
<aggregate-month>
select trunc(sale_date,'m') as month,
prod_code,
customer_code,
sum(price) keep (dense_rank first order by date_price_start) as price
from sales
natural join product_prices
where sale_date > date_from
group by trunc(sale_date,'m'),
prod_code,
customer_code
/