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