create table ipca (
data date,
inflacao number(5,2)
);
Mas, além da inflação do mês, é preciso calcular a inflação acumulada dos últimos doze meses. Com funções analíticas, isso deve ser fácil.
Entretanto, o SQL oferece sum() e count(), mas não uma função de agregação que multiplique os valores. Com um pouquinho de esperteza e logaritmos, isso pode ser superado.
O segredo é somar os logaritmos e depois tirar o exponencial.
select data, inflacao, (exp(acumulada)-1)*100 from (
select data, inflacao,
sum(ln(1+(inflacao/100)))
over (order by data desc rows between current row and 11 following)
as acumulada
from ipca
)
A janela de classificação é autoexplicativa: ela ordena os índices por data decrescente e olha o registro atual e os onze anteriores a ele.Um índice 0,23% vira 1,0023 (1+0,23/100) e um índice -0,05% vira 0,9995 (1-0,05/100). Por isso, substrai-se 1 do exponencial. Se o índice for 0, o 1 o neutraliza. A soma dos logaritmos desses valores corresponde à multiplicação.
Falta uma categoria nas tuas opções que é o uau.
ResponderExcluirUau, eu não me lembrava que somar ln os multiplica