ROWNUM Retornando valores aleatórios sem ordenção

Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
rohilario_
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 5
Registrado em: Qua, 30 Out 2019 8:37 am

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
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

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
souldeath
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 48
Registrado em: Qua, 25 Ago 2010 9:39 am
Localização: Limeira

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

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