Referencia de funciones

NTH_VALUE

Devuelve el valor de column de la fila n-ésima del marco de la ventana.

MySQL 8.4
NTH_VALUE(column, n)
column
Columna o expresión cuyo valor se devuelve
n
Número de la fila en el marco, empezando por 1
INT

Valor devuelto

Valor del tipo de column; NULL si el marco tiene menos de n filas

Ejemplos

El segundo miembro de mayor edad

MySQL 8.4
SELECT member_name,
	birthday,
	NTH_VALUE(member_name, 2) OVER (
		ORDER BY birthday
	) AS second_oldest
FROM FamilyMembers;
member_namebirthdaysecond_oldest
Headley Quincey1960-05-13<NULL>
Ernest Forrest1961-09-11Ernest Forrest
Flavia Quincey1963-02-16Ernest Forrest
Constance Forrest1968-09-06Ernest Forrest
Andie Quincey1983-06-05Ernest Forrest
Lela Quincey1985-06-07Ernest Forrest
Annie Quincey1988-04-10Ernest Forrest
Wednesday Addams2005-01-13Ernest Forrest

El segundo salario de cada departamento

MySQL 8.4
SELECT department_id,
	name,
	salary,
	NTH_VALUE(salary, 2) OVER (
		PARTITION BY department_id
		ORDER BY salary DESC ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
	) AS second_salary
FROM employees;
department_idnamesalarysecond_salary
1Dmitry Sokolov220000210000
1Anna Ivanova210000210000
1Igor Petrov195000210000
1Pavel Smirnov180000210000
1Elena Kozlova175000210000
2Irina Volkova205000200000
2Olga Novikova200000200000
2Maxim Morozov160000200000
2Nikita Popov160000200000
3Tatiana Lebedeva170000155000

Detalles

Con el marco por defecto, la fila n-ésima solo es visible a partir de ella misma: las primeras n - 1 filas de la partición reciben NULL. Para obtener el valor en todas las filas, amplía el marco a toda la partición. NTH_VALUE(column, 1) es lo mismo que FIRST_VALUE(column).

El marco define qué filas de la partición ve la función y se escribe después de ORDER BY: ROWS BETWEEN frame_start AND frame_end cuenta filas, mientras que RANGE BETWEEN frame_start AND frame_end usa los valores de ORDER BY.

LímiteQué significa
UNBOUNDED PRECEDINGLa primera fila de la partición
expr PRECEDINGexpr filas antes de la actual
CURRENT ROWLa fila actual
expr FOLLOWINGexpr filas después de la actual
UNBOUNDED FOLLOWINGLa última fila de la partición

Sin marco se aplica la regla por defecto. Si OVER tiene ORDER BY, el marco va desde el inicio de la partición hasta la fila actual, incluidas las filas con el mismo valor de ORDER BY. Sin ORDER BY, el marco es toda la partición.

Véase también