(Oracle) selecionar todos os valores anteriores a partir de 1 data

12 respostas
E

Pessoal preciso de uma ajuda aqui, é o seguinte tenho que pegar valores de uma tabela começando por 1 data e pegando todos os valores anteriores a ela,

ex: a data que seria passada seria ‘05/06/2012’

ai retornaria todos os valores dos meses anteriores

12 Respostas

drsmachado
SELECT * FROM tabela WHERE coluna_da_data <= to_date('05/06/2012', 'dd/mm/yyyy')

Não funciona?

ManoJava

Bom dia!

Bem simples essa:

select *
  from tabela
  where data < '05/06/2012'

e se vc precisar pegar datas anteriores inclusive a data em questão, vc inclui esses operadores na consulta <= ‘05/06/2012’

ou como o drsmachado passou ja fazendo o parse pro formato de Date

Att.

E

tipo eu n coloquei direito a questão deixa eu tentar explicar.
1 relatório a fazer que é preciso alguns dados de uma tabela e a primeira parte eu resolvi que é a seguinte.
o usuário vai passar uma data e essa consulta retornará
o ultimo dado do mês - o primeiro dado do mês.
isso eu consegui fazer só que a outra parte é a seguinte com a mesma data ele irá fazer esse calc de todos os meses anteriores ate o primeiro dia do ano.
ai que ta o problema desde ja agradeço a todos vlw

drsmachado

Ahn? Cuma?

ManoJava

Agora mudou bastante a pergunta, da uma pesquisada sobre between e como usar os parametros para definir esses períodos que vc quer.

E

É muito dificil explicar , vou tentar novamente.

o relatório que estou fazendo exige um pequeno calculo que é o seguinte:

pegar o valor do ultimo dia do mês e subtrair com o primeiro dia do mês, isso resolvo assim:

SELECT

(SELECT AC FROM TABELA WHERE DIA = TRUNC(DIA))-

(SELECT AC FROM TABELA WHERE DIA = (TRUNC(DIA,MONTH)))

FROM DUAL;

até ae beleza, só que agora eu tenho que fazer isso com todos os meses anteriores . deu pra sacar?

drsmachado

E você quer fazer isso num so select?
Sugiro uma stored procedure, fica mais fácil…

E

foi que eu tinha pensando em uma maneira de resolver só que n deu certo ai voltei a estaca zero =\

E

drsmachado:
E você quer fazer isso num so select?
Sugiro uma stored procedure, fica mais fácil…

é numa procedure msm que tô tentando fazer, no select apenas fiz a de o único mês

drsmachado

Vamos fazer uma pequena análise sobre a situação:
1 - Há um limite de meses e este limite deve estar dentro do mesmo ano.
2 - Não há limite de meses, desde que no mesmo ano.
3 - Há limite de meses, mas não restrição do ano em que estão.
4 - Não há limite e podem estar em qualquer intervalo de anos.

Como pretende cobrir todas as possibilidades?
Claro, você tem os requisitos, eu não.
Eu só consigo pensar em um procedimento armazenado como solução.

E

drsmachado:
Vamos fazer uma pequena análise sobre a situação:
1 - Há um limite de meses e este limite deve estar dentro do mesmo ano.
2 - Não há limite de meses, desde que no mesmo ano.
3 - Há limite de meses, mas não restrição do ano em que estão.
4 - Não há limite e podem estar em qualquer intervalo de anos.

Como pretende cobrir todas as possibilidades?
Claro, você tem os requisitos, eu não.
Eu só consigo pensar em um procedimento armazenado como solução.

é do ano todo e pode ser de qualquer ano, sempre de janeiro a ate o mês requerido

A
<blockquote><div class="quote-author">erivanrgj:</div>

o relatório que estou fazendo exige um pequeno calculo que é o seguinte:

pegar o valor do ultimo dia do mês e subtrair com o primeiro dia do mês, isso resolvo assim:

SELECT

(SELECT AC FROM TABELA WHERE DIA = TRUNC(‘DIA’))-

(SELECT AC FROM TABELA WHERE DIA = (TRUNC(DIA,‘MONTH’)))

FROM DUAL;

até ae beleza, só que agora eu tenho que fazer isso com todos os meses anteriores . deu pra sacar?

Acho que pode fazer o seguinte:

  • Crie um select que retorne a menor e a maior data da tabela, agrupando por mês: to_char(data,‘yyyymm’)
  • Faça um join do resultado acima com a tabela, para pegar o valor na menor data
  • Faça outro join para pegar o valor na maior data
  • Subtraia o resultado de um por outro
Criado 29 de novembro de 2012
Ultima resposta 29 de nov. de 2012
Respostas 12
Participantes 4