sql >> Databasteknik >  >> RDS >> Oracle

Last_value window-funktionen fungerar inte korrekt

I analytiska funktioner måste du ange fönsterintervall. Som standard är det between unbounded preceding and current row , vilket jag antar är självförklarande.

I grund och botten är detta vad som händer när du anger partition by customer_id order by valid_from asc :

  1. Oracle tar alla rader som matchar den aktuella radens customer id
  2. Den ordnar dem i stigande ordning efter valid_from
  3. Det bildar ett fönster som börjar med minsta valid_from datum och slutar med nuvarande rads valid_from .
  4. Den utvärderar last_value , som returnerar din nuvarande rads valid_from .

Vad du behöver göra är att ange ett pågående intervall:

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


  1. oracle sql-fråga för att lista alla datum för föregående månad

  2. Hur man väljer från mysql-arraytext och jämför

  3. MYSQL skiftlägeskänslig sökning (med viloläge) för utf8

  4. Oracle sqlldr:kolumn är inte tillåten här