Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Last_value-Fensterfunktion funktioniert nicht richtig

In Analysefunktionen müssen Sie den Fensterbereich angeben. Standardmäßig ist es between unbounded preceding and current row , von dem ich annehme, dass es selbsterklärend ist.

Im Grunde passiert das, wenn Sie partition by customer_id order by valid_from asc angeben :

  1. Oracle übernimmt alle Zeilen, die mit der customer id der aktuellen Zeile übereinstimmen
  2. Er ordnet sie in aufsteigender Reihenfolge nach valid_from
  3. Es bildet ein Fenster, das mit mindestens valid_from beginnt Datum und endet mit valid_from der aktuellen Zeile .
  4. Er wertet last_value aus , die den valid_from Ihrer aktuellen Zeile zurückgibt .

Was Sie tun müssen, ist einen fortlaufenden Bereich anzugeben:

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