Oracle
 sql >> база данни >  >> RDS >> Oracle

Прозоречната функция Last_value не работи правилно

В аналитичните функции трябва да посочите диапазон на прозореца. По подразбиране е between unbounded preceding and current row , което предполагам, че се обяснява само по себе си.

По принцип това се случва, когато посочите partition by customer_id order by valid_from asc :

  1. Oracle взема всички редове, съответстващи на customer id на текущия ред
  2. Той ги подрежда във възходящ ред по valid_from
  3. Оформя прозорец, започващ с минимум valid_from дата и завършва с valid_from на текущия ред .
  4. Оценява last_value , който връща valid_from на текущия ви ред .

Това, което трябва да направите, е да посочите текущ диапазон:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Разлика между два неподредени разделени списъка (Oracle)

  2. Как да въведете символ за нов ред в Oracle?

  3. Какъв е синтаксисът за дефиниране на процедура на Oracle в друга съхранена процедура?

  4. Ограничете ConnectionTimeout за Oracle Database

  5. Как да превърнем 2 заявки с общи колони (A, B) и (A, C) само в една (A, B, C)?