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

LAST_VALUE

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

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

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

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

Примеры

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

MySQL 8.4
SELECT member_name,
	status,
	birthday,
	LAST_VALUE(member_name) OVER (
		PARTITION BY status
		ORDER BY birthday ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
	) AS youngest_in_status
FROM FamilyMembers;
member_namestatusbirthdayyoungest_in_status
Lela Quinceydaughter1985-06-07Wednesday Addams
Annie Quinceydaughter1988-04-10Wednesday Addams
Wednesday Addamsdaughter2005-01-13Wednesday Addams
Headley Quinceyfather1960-05-13Ernest Forrest
Ernest Forrestfather1961-09-11Ernest Forrest
Flavia Quinceymother1963-02-16Constance Forrest
Constance Forrestmother1968-09-06Constance Forrest
Andie Quinceyson1983-06-05Andie Quincey

Рамка по умолчанию — до текущей строки

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

Подробности

Рамка по умолчанию заканчивается текущей строкой (и строками с тем же значением ORDER BY), а не концом раздела, поэтому без своей рамки функция часто возвращает значение текущей строки. Чтобы получить последнее значение раздела, задайте рамку ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING.

Рамка задаёт, какие строки раздела видит функция, и пишется после 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 нет, рамка — весь раздел.

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

Где изучить