Справочник по функциям

FIRST_VALUE

Возвращает значение column из первой строки рамки окна.

MySQL 8.4
FIRST_VALUE(column)
column
Столбец или выражение, значение которого нужно вернуть

Возвращаемое значение

Значение того же типа, что и column

Примеры

Самый старший в каждом статусе

MySQL 8.4
SELECT member_name,
	status,
	birthday,
	FIRST_VALUE(member_name) OVER (
		PARTITION BY status
		ORDER BY birthday
	) AS oldest_in_status
FROM FamilyMembers;
member_namestatusbirthdayoldest_in_status
Lela Quinceydaughter1985-06-07Lela Quincey
Annie Quinceydaughter1988-04-10Lela Quincey
Wednesday Addamsdaughter2005-01-13Lela Quincey
Headley Quinceyfather1960-05-13Headley Quincey
Ernest Forrestfather1961-09-11Headley Quincey
Flavia Quinceymother1963-02-16Flavia Quincey
Constance Forrestmother1968-09-06Flavia Quincey
Andie Quinceyson1983-06-05Andie Quincey

Отставание от самой высокой зарплаты

MySQL 8.4
SELECT department_id,
	name,
	salary,
	FIRST_VALUE(salary) OVER (
		PARTITION BY department_id
		ORDER BY salary DESC
	) - salary AS gap_to_top
FROM employees;
department_idnamesalarygap_to_top
1Dmitry Sokolov2200000
1Anna Ivanova21000010000
1Igor Petrov19500025000
1Pavel Smirnov18000040000
1Elena Kozlova17500045000
2Irina Volkova2050000
2Olga Novikova2000005000
2Maxim Morozov16000045000
2Nikita Popov16000045000
3Tatiana Lebedeva1700000

Подробности

Рамка по умолчанию начинается с первой строки раздела, поэтому без своей рамки функция возвращает первое значение раздела.

Рамка задаёт, какие строки раздела видит функция, и пишется после ORDER BY: ROWS BETWEEN frame_start AND frame_end считает строки, а RANGE BETWEEN frame_start AND frame_end — значения ORDER BY.

ГраницаЧто означает
UNBOUNDED PRECEDINGПервая строка раздела
expr PRECEDINGexpr строк до текущей
CURRENT ROWТекущая строка
expr FOLLOWINGexpr строк после текущей
UNBOUNDED FOLLOWINGПоследняя строка раздела

Без рамки действует правило по умолчанию. Если в OVER есть ORDER BY, рамка идёт от начала раздела до текущей строки, включая строки с тем же значением ORDER BY. Если ORDER BY нет, рамка — весь раздел.

Смотрите также

Где изучить