MONTH NO 9i

Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
todopoderoso
Rank: Estagiário Júnior
Rank: Estagiário Júnior
Mensagens: 2
Registrado em: Qua, 06 Fev 2008 2:04 pm
Localização: são paulo - sp

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
Avatar do usuário
TBou
Rank: Analista Sênior
Rank: Analista Sênior
Mensagens: 136
Registrado em: Qui, 05 Ago 2004 9:33 am
Localização: Campo Grande - MS
Thiago Bourscheidt
thiago.info@apoiorural.com.br
Analista de Sistemas

Selecionar tudo

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

Selecionar tudo

trunc(data,'month')
todopoderoso
Rank: Estagiário Júnior
Rank: Estagiário Júnior
Mensagens: 2
Registrado em: Qua, 06 Fev 2008 2:04 pm
Localização: são paulo - sp

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)
Trevisolli
Moderador
Moderador
Mensagens: 2016
Registrado em: Qua, 12 Jan 2005 3:25 pm
Localização: Araraquara - SP
Abraço,

Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP

Brother,

Seria isso?

Selecionar tudo

SELECT ADD_MONTHS(SYSDATE,-6) 
  FROM  dual;
Daí só tratar o SYSDATE pelo parâmetro que irá passar.
Avatar do usuário
TBou
Rank: Analista Sênior
Rank: Analista Sênior
Mensagens: 136
Registrado em: Qui, 05 Ago 2004 9:33 am
Localização: Campo Grande - MS
Thiago Bourscheidt
thiago.info@apoiorural.com.br
Analista de Sistemas

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
Avatar do usuário
TBou
Rank: Analista Sênior
Rank: Analista Sênior
Mensagens: 136
Registrado em: Qui, 05 Ago 2004 9:33 am
Localização: Campo Grande - MS
Thiago Bourscheidt
thiago.info@apoiorural.com.br
Analista de Sistemas

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)
Responder
  • Informação
  • Quem está online

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