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

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

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

Não funciona?

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.

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

Ahn? Cuma?

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

É 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?

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

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

[quote=drsmachado]E você quer fazer isso num so select?
Sugiro uma stored procedure, fica mais fácil…[/quote]

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

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.

[quote=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.[/quote]

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

[quote=erivanrgj]
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?[/quote]

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