Página 1 de 1

ROWNUM Retornando valores aleatórios sem ordenção

Enviado: Sex, 22 Nov 2019 5:26 pm
por rohilario_
Boa tarde! :D
Pessoal, cá estou eu mais uma vez, desta vez na tentativa de usar o RONUM<10 e order by desc para trazer os 10 maiores valores de um tabela.
Nunca tive problema ao usar o ROWNUM em consultas pequenas, como numa dessa com vários wheres, estou tendo problemas, pois numa primeira consulta com o código abaixo, tenho o retorno correto, da segunda em diante, não vem os 10 valores, vem tipo 5 e valores de forma aleatória.. fiquei sem entender.. :cry: :?:

Segue minha consulta

Selecionar tudo

select P.Codusur, U.NOME, SUM (P.VLATEND)VLTOTAL from pcpedc p, PCUSUARI U where P.CODUSUR = U.CODUSUR and ROWNUM<=70 AND P.CODSUPERVISOR NOT IN (1) AND P.DATA BETWEEN '22-NOV-2019' AND '30-NOV-2019' GROUP BY P.Codusur, U.NOME order by VLTOTAL

Re: ROWNUM Retornando valores aleatórios sem ordenção

Enviado: Sex, 22 Nov 2019 6:55 pm
por dr_gori
Tem que fazer em duas etapas:

Selecionar tudo

select *
from (
  select P.Codusur, U.NOME, SUM (P.VLATEND)VLTOTAL 
  from pcpedc p, PCUSUARI U 
  where P.CODUSUR = U.CODUSUR 
    and ROWNUM<=70 
    AND P.CODSUPERVISOR NOT IN (1) 
    AND P.DATA BETWEEN '22-NOV-2019' 
    AND '30-NOV-2019' 
  GROUP BY P.Codusur, U.NOME 
  order by 3 desc
  )
where rownum <=10
Também dá pra usar Funções Analíticas pra isso.
https://glufke.net/oracle/download/funco ... TICAS.html

:-o

Re: ROWNUM Retornando valores aleatórios sem ordenção

Enviado: Sáb, 23 Nov 2019 3:17 pm
por souldeath
Só relembrando que o filtro do rownum é aplicado antes da ordenação quando especificado um Order by. Caso o Oracle utilize ou não um índice na consulta pode acontecer isso que você mencionou de virem dados "aleatórios" que na verdade é a ordem que está no índice.

https://docs.oracle.com/cd/B19306_01/se ... mns009.htm