Получение первых записей интервалов агрегирования
Функция

Определяет для каждой записи выборки первое значение в её интервале агрегирования.

Спецификация
   
< первая запись >::=
Синтаксические правила
  1. < Значимое выражение > задает имя упорядочиваемого столбца.

    create or replace table rank_exmp(i int, j int);
    insert into rank_exmp (i,j) values (1, 100);
    insert into rank_exmp (i,j) values (1, 700);
    insert into rank_exmp (i,j) values (2, 200);
    
    select first_value(i) from rank_exmp;
    | 1|
  2. < Значимые выражения > в < OVER-спецификации > задают столбцы выборки, по которым выполняется разбивка выборки на интервалы агрегирования.

  3. < Имена столбцов > в < ORDER BY-спецификации > внутри < OVER-спецификации > задают имена упорядочиваемых столбцов.

Общие правила
  1. Для каждой записи выборки возвращается первое значение того интервала агрегирования, которому принадлежит эта запись.

    create or replace table ntest(i int, j int);
    insert into ntest values(1,NULL);
    insert into ntest values(2,NULL);
    insert into ntest values(2,NULL);
    insert into ntest values(2,20);
    insert into ntest values(3,30);
    insert into ntest values(3,NULL);
    insert into ntest values(3,NULL);
    insert into ntest values(4,40);
    insert into ntest values(4,NULL);
    insert into ntest values(4,41);
    insert into ntest values(5,50);
    
    select * from ntest;
     I           J
     -           -
    |          1|             |
    |          2|             |
    |          2|             |
    |          2|           20|
    |          3|           30|
    |          3|             |
    |          3|             |
    |          4|           40|
    |          4|             |
    |          4|           41|
    |          5|           50|
    
    select i as "Интервал",
           nvl(cast first_value(j) over(partition by i) as char, 'null') as "Первое значение" 
      from ntest;
     Интервал    Первое значение
     --------    ---------------
    |          1|NULL           |
    |          2|NULL           |
    |          2|NULL           |
    |          2|NULL           |
    |          3|30             |
    |          3|30             |
    |          3|30             |
    |          4|40             |
    |          4|40             |
    |          4|40             |
    |          5|50             |
  2. Если значение первой записи равно NULL, возвращается также NULL.

Пример

Для каждого владельца авто получить сведения о марке его авто, возрасте владельца авто и максимальном возрасте среди всех владельцев аналогичных авто.

select auto.model, person.name, person.age,
       first_value(person.age) over(partition by auto.model order by person.age desc)
  from auto,person
 where auto.personid=person.personid 
 order by auto.model;

| 124 SPORT COUPE | POORE    | 33 | 68 |
| 124 SPORT COUPE | TANIMOTO | 56 | 68 |
| 124 SPORT COUPE | HALL     | 45 | 68 |
| 124 SPORT COUPE | PRATT    | 43 | 68 |
| …               |          |    |    |
| 1275 GT         | MERTA    | 48 | 52 |
| 1275 GT         | MCDONALD | 52 | 52 |
| 1302 S          | POORE    | 64 | 64 |