mês atual / mês anterior

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
eder.fagundes
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 3
Registrado em: Seg, 29 Jul 2013 10:49 am

Boa tarde,
estou precisando pegar um valor de um determinado mês e dividir pelo valor do mês anterior.
Tinha feito com sysdate -1 porem ele só vai me trazer o mês atual em que estamos -1.

Caso o mês que estiver na tabela for diferente como vou pegá-lo e dividir pelo valor que esta no mês anterior a ele?

ex.: mês_Ano|Valor mês_Ano |Valor
05/2012 |100 06/2012 | 50

Tenho que dividir 50/100 e mostrar o resultado.

Preciso fazer para todos os registros que há na tabela, com datas diferentes.

Talves é até algo simples, mais estou quebrando a cabeça com isso.

Abs.
eder.fagundes
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 3
Registrado em: Seg, 29 Jul 2013 10:49 am

eder.fagundes escreveu:Boa tarde,
estou precisando pegar um valor de um determinado mês e dividir pelo valor do mês anterior.
Tinha feito com sysdate -1 porem ele só vai me trazer o mês atual em que estamos -1.

Caso o mês que estiver na tabela for diferente como vou pegá-lo e dividir pelo valor que esta no mês anterior a ele?

ex.: mês_Ano|Valor mês_Ano |Valor
05/2012 |100 06/2012 | 50

Tenho que dividir 50/100 e mostrar o resultado.

Preciso fazer para todos os registros que há na tabela, com datas diferentes.

Talves é até algo simples, mais estou quebrando a cabeça com isso.

Abs.
Obs.:Os campos mês_Ano não são do tipo data e sim do tipo varchar.
DanielNN
Moderador
Moderador
Mensagens: 641
Registrado em: Seg, 03 Set 2007 3:26 pm
Localização: Fortaleza - CE
att,

Daniel N.N.

Oi Eder, Bem vindo ao fórum.

Sobre sua dúvida, gostaria de ver como você esta fazendo.

Sobre o "SYSDATE -1" , só diminui UM dia da data(no caso SYSDATE), talvez você queria fazer o ADD_MONTHS(data, -1), que diminui 1 mês da data.
Porém, no seu caso você tem 2 alternativas, ou faz 2 "subselects" para cada mês ou gera um select que incorpore os 2 meses e utilize funções mais avançadas da Oracle para realizar esta divisão.
eder.fagundes
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 3
Registrado em: Seg, 29 Jul 2013 10:49 am

Ola Noctifero, obrigado pela resposta, foi justamente a maneira que consegui fazer, fiz dois select's dentro de outro select nomeando os select's como se fossem tabelas e fazendo inner join entre elas.
Ex.:

Selecionar tudo

select * from(select campo1, campo2, campo3 from tabela where mês = TO_CHAR(ADD_MONTHS(TO_DATE('01/' || '08/2013', 'DD/MM/YYYY'),
                                  -1),
                       'MM/YYYY')TAB1
INNER JOIN 
(select campo1, campo2, campo3 from tabela where mês = TO_CHAR(ADD_MONTHS(TO_DATE('01/' || '08/2013', 'DD/MM/YYYY'),
                                  -2),
                       'MM/YYYY')TAB2
ON TAB.CAMPO1 = TAB1.CAMPO1
Dessa maneira consegui o resultado que queria...


Muito obrigado.
Responder
  • Informação
  • Quem está online

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