Subquery Oracle, utilizando quot;ORDER BYquot; na mesma

Oracle

10/03/2008

Bom dia,

Gostaria de esclarecer um erro, ao utilizar uma subconsulta no Oracle 10g, o mesmo me retorna o erro a respeito da falta de parenteses a direita, porem o erro da subconsulta ao que notei se refere a clausula order by, dentro da mesma, alguma solução? ou meu modo de criação da mesma estári incorreta, lembrando que a mesma consulta e valida em firebird, sendo necessario somente a alteração do comando ´rownum = 1´ pelo ´first 1´, segue abaixo o trecho:

(select hs.cod_sit from FPHSTSIT hs where hs.cod_emp=f.cod_emp and hs.cod_func=f.cod_func and hs.dta_alter<=´01/01/2008´ and rownum=1 order by hs.dta_alter desc) ultimaSituacaoMesAno



Javapaulomg

Javapaulomg

Curtidas 0

Respostas

Javapaulomg

Javapaulomg

10/03/2008

Uma retificação na consulta.


select ff.cod_func, f.chapa, f.nome,
(select hs.cod_sit from FPHSTSIT hs where hs.cod_emp=f.cod_emp and hs.cod_func=f.cod_func and hs.dta_alter<=´01/01/2008´ and rownum=1 order by hs.dta_alter desc) ultimaSituacaoMesAno
from FPFICHAF ff
inner join FPFUNC f on ff.cod_func=f.cod_func and ff.cod_emp=f.cod_emp
where id_remessa = 1
and cod_tipo not in (1,2)




GOSTEI 0
Flyskin

Flyskin

10/03/2008

o order by deve ser a última instrução do comando select... a única exceção é em funções matemáticas/agregadas do oracle quando existir o comando over()...


GOSTEI 0
Nigro

Nigro

10/03/2008

Tenho o mesmo ambiente e continua com erro.


GOSTEI 0
Flyskin

Flyskin

10/03/2008

como mencionei antes o problema é o order by na subconsulta pois a linguagem SQL espera que o order by seja a última instrução e quando está interpretando a sua consulta, encontra o order by e não o parênteses para fechar o anterior, te retorna este erro...


GOSTEI 0
Margaridi

Margaridi

10/03/2008

Experimente utilizar uma subquery para trazer a data da ultima atualização:

select ff.cod_func
,      f.chapa
,      f.nome
,      hs.cod_sit ultimaSituacaoMesAno
from   FPHSTSIT hs 
,      FPFICHAF ff 
inner join FPFUNC f on ff.cod_func=f.cod_func and ff.cod_emp=f.cod_emp 
where id_remessa = 1 
and   cod_tipo not in (1,2) 
and   hs.cod_emp=f.cod_emp 
and   hs.cod_func=f.cod_func 
and   hs.dta_alter in
      (select   max(hs1.dta_alter) dta_alter
       from     FPHSTSIT hs1 
       where    hs1.cod_emp=f.cod_emp 
       and      hs1.cod_func=f.cod_func 
       and      hs1.dta_alter<=´01/01/2008´ 
       )
 
       



GOSTEI 0
POSTAR