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.
LEAD E LAG
-
- Rank: Programador Júnior
- Mensagens: 29
- Registrado em: Ter, 29 Dez 2009 10:43 am
- Localização: Curitiba
É isso aí...
- fsitja
- 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
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.
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.
-
- 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.
é 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.
- fsitja
- 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
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:
Depois roda o seguinte:
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.
Se sim, retorna para nós o que é a sua versão, rodando o SQL abaixo:
select * from v$version;
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
Segue o link abaixo:
http://download.oracle.com/docs/cd/B283 ... m#ADDCI026
É um recurso muito bacana, mas não reinvente a roda.
-
- Informação
-
Quem está online
Usuários navegando neste fórum: Nenhum usuário registrado e 2 visitantes