Ir para conteúdo

geovani.cristofolini

Members
  • Total de itens

    7
  • Registro em

  • Última visita

Tudo que geovani.cristofolini postou

  1. geovani.cristofolini

    Criar função para cálculo de juros compostos

    Ótimo, deu certo! obrigado! select 10000 * EXP(SUM(LOG(1 + (1 * (percentual/100))))) from tab_indice where sigla = 'INPC' and data between 20190901 and 20191101
  2. geovani.cristofolini

    Criar função para cálculo de juros compostos

    Bom dia pessoal, Preciso fazer uma consulta SQL que aplica o cálculo de juros compostos (juros sobre juros). https://www.significados.com.br/juros-compostos/ Valor Inicial: R$ 1.000,00 Mês Juros Reajuste 01/08/2019 0,12% R$ 1.001,20 01/09/2019 -0,05% R$ 1.000,70 01/10/2019 0,04% R$ 1.001,10 01/11/2019 0,54% R$ 1.006,51 01/12/2019 1,22% R$ 1.018,78 Valor Reajuste: R$ 1.018,78 Creio que apenas usando select não seja possível, porque necessita de uma estrutura de repetição para aplicar o resultado do primeiro mês em outro mês e assim sucessivamente. Penso que devo fazer uma função, onde passaria como parâmetro, o valor inicial, data inicial e data final. Como não tenho conhecimento em desenvolvimento de função no mysql, gostaria de um exemplo, assim acredito que conseguido implementar. Preciso de um exemplo de função, que faz um loop girando em todos os registros da tabela de juros, filtrando os meses conforme data inicial e final, para cada registro, aplicaria o percentual de reajuste. No primeiro mês aplicaria o percentual em cima do valor inicial, nos proximos meses aplicaria o percentual em cima do reajuste anterior. Alguém já fez essa cálculo? Estou usando o MySQL versão 5.1.73.
  3. geovani.cristofolini

    Criar função para cálculo de juros compostos

    Olá pessoal, consegui implementar, segue o código que atendeu a minha necessidade. Criar tabela: create table tab_indice(sigla varchar(50), data date, percentual float); Inserir alguns registros: insert into tab_indice values('INPC',20190801,0.12); insert into tab_indice values('INPC',20190901,-0.05); insert into tab_indice values('INPC',20191001,0.04); insert into tab_indice values('INPC',20191101,0.54); insert into tab_indice values('INPC',20191201,1.22); Criar a função: CREATE FUNCTION calcIndice(pvalor float, pindice varchar(50), pdata_inicial date, pdata_final date) returns float begin DECLARE valor_reajustado, i, x float DEFAULT 0; DECLARE finished INTEGER DEFAULT 0; DECLARE curReajuste CURSOR FOR SELECT percentual from tab_indice where sigla = pindice and data between pdata_inicial and pdata_final; DECLARE CONTINUE HANDLER FOR NOT FOUND SET finished = 1; OPEN curReajuste; getIndice: LOOP FETCH curReajuste INTO i; IF finished = 1 THEN LEAVE getIndice; END IF; IF x = 0 then SET valor_reajustado = pvalor + (pvalor * (i/100)); else SET valor_reajustado = valor_reajustado + (valor_reajustado * (i/100)); end if; set x = x + 1; END LOOP getIndice; CLOSE curReajuste; return valor_reajustado; end; Chamar a função no select: SELECT calcIndice(10000,'INPC', 20190901, 20191101)
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.