Página 1 de 1

MONTH NO 9i

Enviado: Qua, 06 Fev 2008 3:44 pm
por todopoderoso
Pessoal, boa tarde!!!!

Gostaria que me ajudassem, preciso pegar sempre os últimos 6 meses apartir de um mês atual que é dinâmico, porém estou tendo algumas dificuldades utilizo o ORACLE 9i.

Selecionar tudo

select to_char(add_months(to_date(max(DATA),'YYYYMM'),-6),'YYYYMM') 
FROM Tabela_tempo
porém não está retornando um valor correto.

Então tentei o seguinte.

Selecionar tudo

select data FROM tabela_tempo where month(data) 
between (select max(month(data)) from tabela_tempo) 
   and  (select max(month(data))-6 from Tabela_tempo)
 )
Rodando esse segundo, aparece o seguinte erro...

Selecionar tudo

ORA-00904: "MONTH": invalid identifier
alguém poderia me ajudar?!?!?!

valeu

Enviado: Qua, 06 Fev 2008 3:48 pm
por TBou

Selecionar tudo

month(data)
não sei se isto é válido teria que ser assim

Selecionar tudo

trunc(data,'month')

Enviado: Qua, 06 Fev 2008 4:08 pm
por todopoderoso
Cara, valeu pela dica mais infelizmente não funcionou...

apresenta o seguinte erro:

Selecionar tudo

ORA-01722: invalid number
dá uma olhada como ficou:

Selecionar tudo

select data 
FROM tabela_tempo 
where trunc(data, 'month') between (select max(trunc(data, 'month')) from tabela_tempo) 
and  (select max(trunc(data, 'month'))-6 from tabela_tempo)

Enviado: Qua, 06 Fev 2008 4:08 pm
por Trevisolli
Brother,

Seria isso?

Selecionar tudo

SELECT ADD_MONTHS(SYSDATE,-6) 
  FROM  dual;
Daí só tratar o SYSDATE pelo parâmetro que irá passar.

Enviado: Qui, 07 Fev 2008 11:41 am
por TBou
Seguinte este seu campo DATA é do tipo date..?


e tambem teria que fazer uma alteração no script

Selecionar tudo

select data FROM tabela_tempo where trunc(data, 'month') between (select max(trunc(data, 'month')) from tabela_tempo) and ADD_MONTHS((select max(trunc(data, 'month')) from tabela_tempo),-6)
se seu campo DATA for do tipo date esta select deverá funcionar
agora se não for você terá que usar o to_date dentro do trunc

vlw

Enviado: Qui, 07 Fev 2008 11:43 am
por TBou
melhorando ainda a select podemos evitar a utilização do between

veja

Selecionar tudo

select data 
FROM tabela_tempo 
where trunc(data, 'month') >= ADD_MONTHS((select max(trunc(data, 'month')) from tabela_tempo),-6)