FUNÇÕES ANALÍTICAS DO ORACLE – Look Back e Look Ahead (LAG/LEAD)

Duas outras funções analíticas são o LAG (Look back – olhe para trás) e o LEAD (Look Ahead – olhar adiante), que foram introduzidos no Oracle 8i. Ele fornece acesso a mais do que uma linha de uma tabela, ao mesmo tempo sem um auto-junção. Dada uma série de linhas retornadas de uma consulta e uma posição do cursor, LAG / LEAD fornece acesso a uma linha em um dado físico antes do deslocamento do posicionamento.

Sintaxe:

LAG(value_expr [, offset ] [, default ]) OVER ([ query_partition_clause ] order_by_clause)
LEAD(value_expr [, offset ] [, default ]) OVER ([ query_partition_clause ] order_by_clause)

  1. value_expr – Você não pode aninhar funções analíticas usando LAG ou qualquer outra função analítica para value_expr.
    No entanto, você pode usar outras expressões função embutida para value_expr.
  2. offset – Se você não especificar offset, então o seu padrão é 1.
  3. default – O valor padrão opcional é devolvido se o deslocamento vai além do escopo da janela. Se você não especificar padrão, o padrão é nulo

O exemplo a seguir fornece, para cada pessoa na tabela emp, o salário do funcionário contratado antes e depois;

  1  select nome, dt_contrato, vl_contrato,
  2  LAG(vl_contrato, 1, 0) OVER (ORDER BY dt_contrato) AS vl_contr_ant, -- Look Back
  3  LEAD(vl_contrato, 1, 0) OVER (ORDER BY dt_contrato) AS vl_contr_prox -- Look Ahead
  4* FROM t
SQL> /

NOME                           DT_CONTRAT VL_CONTRATO VL_CONTR_ANT VL_CONTR_PROX
------------------------------ ---------- ----------- ------------ -------------
AGUA DA FONTE                  29/01/2001        7000            0         15000
UNILEVER                       02/07/2001       15000         7000         10000
SBT                            12/07/2001       10000        15000         15000
HONDA                          20/02/2003       15000        10000          1500
GRANFINO                       20/03/2003        1500        15000          5500
BRASTEMP                       20/09/2003        5500         1500          2000
AGUA ONLINE                    15/02/2005        2000         5500         32000
GLOBO                          01/07/2006       32000         2000          2000
BOMBRIL                        22/10/2007        2000        32000         35000
JOHNSON E JOHNSON              19/01/2009       35000         2000          5000
FLAMENGO                       20/03/2010        5000        35000          2000
REXONA                         01/08/2012        2000         5000             0

12 rows selected.

Fonte: Oracle Docs: LAG/LEAD

%name FUNÇÕES ANALÍTICAS DO ORACLE   Look Back e Look Ahead (LAG/LEAD)

Autor: Rafael Stoever

Bacharel em Sistema de Informação pela Uniasselvi, atualmente cursando Gerenciamento de Projetos em TI pela Pós Graduação Uniasselvi. Atuo como Analista de suporte a banco de dados – DBA pela Lumina Serviços em TI residente de Blumenau/ SC, OPN Certified Specialist, Certificado OCP 10g/11g/12c, OCE RAC10g e Linux 10g. Conhecimentos em Microsoft SqlSever, Mysql e programação web (php,asp).