Oracle
July 7, 2023

Oracle SQL: Получение первого/последнего значения в группе.

Используем известную схему SCOTT, таблицу EMP.

select * from scott.emp order by job, hiredate

Допустим, нужно получить значение sal для первого и последнего нанятого работника в разрезе должности (job). Для SALESMAN, например, это будет 1600, - для значения hiredate = 20.02.1981, и 1250, - для значения hiredate = 28.09.1981 соответственно.

Решение - используем функции first и last:

select 
job
,min (sal) keep (dense_rank first order by hiredate) first_sal
,min (sal) keep (dense_rank last order by hiredate) last_sal
from scott.emp
group by job

В реальности такое может понадобиться для какой-нибудь аналитики, например, получения доходов заемщика на момент первой и последней заявок на кредит.

P.S. Знакомые с PostgreSQL заметят, что подобный функционал там достигается при помощи кляузы distinct on.