multiplicação entre colunas

Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
batofao
Rank: Programador Pleno
Rank: Programador Pleno
Mensagens: 40
Registrado em: Seg, 30 Ago 2010 9:47 am
Localização: Jundiai

pessoal vocês sabem como consigo fazer uma consulta como esse exemplo

Selecionar tudo

nome                   ultimo_dia_do mês       valor           novo_campo
Leandro                30/02/2010                5
Carlos                 30/03/2010                4
Julio                  30/04/2010                7
preciso de um novo campo que me traga a seguinte solução:
valor / valor do mês passado - 1

no caso por exmplo teriamos que começae com o valor do dia 30/04
7/4 - 1
depois preciso do resultado do dia 30/03 que seria 4/5 -1
e assim por diante...
victorhugomuniz
Moderador
Moderador
Mensagens: 1396
Registrado em: Sex, 01 Fev 2008 2:06 pm
Localização: Rio de Janeiro - RJ
Contato:
:D

você precisa dar mais informações para chegar a uma solução madura..

por hora..

Selecionar tudo

select  a.nome,
        a.ultimo_mês,
        a.valor,
        (select (valor/a.valor)-1 from testeABC where add_months(a.ultimo_mês,1) = ultimo_mês)
from testeABC a;
:mrgreen:
batofao
Rank: Programador Pleno
Rank: Programador Pleno
Mensagens: 40
Registrado em: Seg, 30 Ago 2010 9:47 am
Localização: Jundiai

vamos la,

tabelas que tenho: cotacoes, feriados, zxt_calc_rentabilidade

regra: calcular rentabilidade que é valor(cotacoes)/valor do mês passado(cotacoes)-1 (obs só vale os valores dos ultimos dias ulteis do mês, meu select já faz isso achar os dias ulteis)

minha tabela zxt_cal_rentabilidade sever mais ou meno como um cadastro, então é o seguinte premeiro vou em minha tabela zxt_calc_rentabiidade dou um select no campo nome do cliente,

se o cliente que eu digitei tem na tabela então ele vai pegar o nome do fundo, vai na tabela de cotações e vai me trazer o valor de todos os dias desse fundo (porque ele tem uma cota todo dia), depois disso entro com o meu select para descobrir todos os ultimos dias ulteis do mês, depois que tenho esse valores:

Selecionar tudo

cliente          nome do fundo           ultimo dia do mês    valor          X
teste             cd1 =1,5               30/02/2010            1,5           x 
teste             cd1 =1,5               30/03/2010            1,7           x
teste             cd1 =1,5               30/04/2010            2,3           x
teste             cd1 =1,5               30/05/2010            5,3           x
preciso aplicar a regra que é a conta X= valor(30/05/2010) / valor (30/04/2010) -1

depois para o mês anterior x= valor (30/04/2010) / valor(30/03/2010)-1

e assim por diante do meu ultimo registro ao primeiro

não sei se fui claro

segue meu select que tenho:

Selecionar tudo

select DISTINCT zx.nome_cliente, zx.nome_do_fundo, co.data, co.valor 
        from cotacoes CO, fundos FUN, zxt_cal_rentabilidade ZX 
        where zx.nome_cliente = UPPER(:nome) and 
        co.cod_produto = zx.cod_produto 
              and FUN.cod_produto = zx.cod_produto and
                  co.data in (select max(RET_DATA) from 
                      (select to_date(:data_entrada)+level-1 RET_DATA 
                          from dual   
                          connect by 
                          to_date(:data_entrada)+level-1 
                          <= last_day(to_date(:data_final)) 
                          MINUS 
                            select data from feriados_internacionais) 
                          GROUP by 
                          to_char(RET_DATA,'MM/YYYY') 
                           order by zx.nome_do_fundo, co.data
obrigado,
batofao
Rank: Programador Pleno
Rank: Programador Pleno
Mensagens: 40
Registrado em: Seg, 30 Ago 2010 9:47 am
Localização: Jundiai

tentei fazer usar o select acima que você me passou mais ele fala que a subconsulta de uma inica linha retorna mais de uma linha
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 8 visitantes