Subquery Oracle, utilizando quot;ORDER BYquot; na mesma
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:
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
Curtidas 0
Respostas
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
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
10/03/2008
Tenho o mesmo ambiente e continua com erro.
GOSTEI 0
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
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