Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

A função de janela Last_value não funciona corretamente


Em funções analíticas, você precisa especificar o intervalo da janela. Por padrão, é between unbounded preceding and current row , que considero autoexplicativo.

Basicamente, isso é o que acontece quando você especifica partition by customer_id order by valid_from asc :
  1. O Oracle pega todas as linhas que correspondem ao customer id da linha atual
  2. Ele os ordena em ordem crescente por valid_from
  3. Ele forma uma janela começando com o mínimo valid_from data e terminando com valid_from da linha atual .
  4. Avalia last_value , que retorna o valid_from da sua linha atual .

O que você precisa fazer é especificar um intervalo contínuo:
16:53:00 [email protected]> ed
Wrote file S:\spool\sandbox\BUFFER_SYSTEM_38.sql

  1  select last_value(VALID_FROM) OVER (
  2    partition by customer_id
  3    ORDER BY VALID_FROM asc
  4    range between current row and unbounded following
  5  ) rn
  6* from   t
16:53:21 [email protected]> /

RN
---------------------------------------------------------------------------
04-DEC-13 11.07.01.000000 AM
04-DEC-13 11.07.01.000000 AM
04-DEC-13 11.07.01.000000 AM

Elapsed: 00:00:00.01