Oracle
 sql >> Base de données >  >> RDS >> Oracle

La fonction de fenêtre last_value ne fonctionne pas correctement

Dans les fonctions analytiques, vous devez spécifier la plage de fenêtres. Par défaut, c'est between unbounded preceding and current row , que je suppose être explicite.

En gros, c'est ce qui se passe lorsque vous spécifiez partition by customer_id order by valid_from asc :

  1. Oracle prend toutes les lignes correspondant à l'customer id de la ligne actuelle
  2. Il les classe dans un ordre croissant par valid_from
  3. Il forme une fenêtre commençant par minimum valid_from date, et se terminant par valid_from de la ligne actuelle .
  4. Il évalue last_value , qui renvoie le valid_from de votre ligne actuelle .

Ce que vous devez faire est de spécifier une plage continue :

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