LEAD E LAG

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
EvertonKopec
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 29
Registrado em: Ter, 29 Dez 2009 10:43 am
Localização: Curitiba
É isso aí...

EXISTE ALGUMA FUNÇÃO ANALITICA SEMELHANTE AO LEAD E LAG.

O BANCO QUE UTILIZO SÃO OLTP E ESSAS SÃO OLAP.

O QUE EU QUERO É PEGAR O PROXIMO REGISTRO E O REGISTRO ANTERIOR.
Avatar do usuário
fsitja
Rank: OraSauro
Rank: OraSauro
Mensagens: 611
Registrado em: Seg, 19 Jan 2009 4:29 pm
Localização: Gaúcho no Rio de Janeiro - RJ
"The scars exist to remind us that the past was real"
Campanha: Como fazer uma pergunta e obter uma resposta.
http://tkyte.blogspot.com/2005/06/how-t ... tions.html

OCA & OCP Developer — OCE SQL Expert — OCS Data Warehousing Specialist

Não entendi sua questão...
Você pode usar LEAD, LAG, FIRST_VALUE, AVG, SUM e qualquer outra função analítica em qualquer RDBMS Oracle. Algumas são da versão 11g, tipo NTH_VALUE e LISTAGG, mas fora exceções as funções são as mesmas quer sua instância seja usada para OLTP ou OLAP, a menos que você tenha versões diferentes, uma muito antiga no seu OLTP. Desde a 8i, se não me engano, já existia SQL analítico (sem opções de boundaries nas moving windows, sem partitioning ou "keep dense_rank first/last").

O que pode acontecer é o OLAP ser Enterprise Edition e ter recursos de partitioning e outras features específicas, mas não no nível de SQL para consultas.
EvertonKopec
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 29
Registrado em: Ter, 29 Dez 2009 10:43 am
Localização: Curitiba
É isso aí...

Não, Não...
é que no SGBD do meu serviço essas duas funções analiticas lead e lag não são ativas...
então por isso estou pesquisando uma função alternativa para acessar o registro seguinte e tambem o registro anterior fazendo comparação entre eles.

Estou pensando em rownum mas ainda estou vendo uma logica certa... to tentando não utilizar cursor...

mas to vendo que não tenho alternativa.

O pior que não sei muito sobre cursor no pl sql.
Avatar do usuário
fsitja
Rank: OraSauro
Rank: OraSauro
Mensagens: 611
Registrado em: Seg, 19 Jan 2009 4:29 pm
Localização: Gaúcho no Rio de Janeiro - RJ
"The scars exist to remind us that the past was real"
Campanha: Como fazer uma pergunta e obter uma resposta.
http://tkyte.blogspot.com/2005/06/how-t ... tions.html

OCA & OCP Developer — OCE SQL Expert — OCS Data Warehousing Specialist

Como assim? Você está usando um banco Oracle?

Se sim, retorna para nós o que é a sua versão, rodando o SQL abaixo:

Selecionar tudo

select * from v$version;
Depois roda o seguinte:

Selecionar tudo

with t as (
select 1 col1 from dual union
select 2 col1 from dual union
select 3 col1 from dual union
select 4 col1 from dual union
select 5 col1 from dual)
select col1,
       lead(col1) over (order by col1)
  from t
O Oracle permite inclusive criar na mão funções analíticas e de agregação. Um exemplo da documentação é uma função que calcula o "segundo maior" valor de um grupo (agregação) ou janela móvel (analítica).
Segue o link abaixo:
http://download.oracle.com/docs/cd/B283 ... m#ADDCI026

É um recurso muito bacana, mas não reinvente a roda.
Responder
  • Informação
  • Quem está online

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