Получение первых записей интервалов агрегирования
Функция
Определяет для каждой записи выборки первое значение в её интервале агрегирования.
Спецификация
::=
Синтаксические правила
-
< Значимое выражение >
задает имя упорядочиваемого столбца.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|
-
< Значимые выражения >
в< OVER-спецификации >
задают столбцы выборки, по которым выполняется разбивка выборки на интервалы агрегирования. -
< Имена столбцов >
в< ORDER BY-спецификации >
внутри< OVER-спецификации >
задают имена упорядочиваемых столбцов.
Общие правила
-
Для каждой записи выборки возвращается первое значение того интервала агрегирования, которому принадлежит эта запись.
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 |
-
Если значение первой записи равно 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 |