SQL Academy
Premium
Funktionsreferenz

FIRST_VALUE

Gibt den Wert von column aus der ersten Zeile des Fensterrahmens zurück.

MySQL 8.1
FIRST_VALUE(column) OVER ([PARTITION BY ...] [ORDER BY ...] [frame])

Parameter

column
Spalte oder Ausdruck, dessen Wert zurückgegeben wird
PARTITION BYoptional
Spalten, nach denen die Zeilen in Partitionen aufgeteilt werden
ORDER BYoptional
Reihenfolge der Zeilen in der Partition, die bestimmt, welche Zeile die erste ist; ohne sie ist die erste Zeile beliebig
frameSchlüsselwortoptional
Fensterrahmen: ROWS oder RANGE BETWEEN start AND end; standardmäßig vom Anfang der Partition bis zur aktuellen Zeile

Rückgabewert

Wert vom Typ von column

Beispiele

Ältestes Mitglied je Status

MySQL 8.1
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

Abstand zum höchsten Gehalt

MySQL 8.1
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

Details

Der Standardrahmen beginnt bei der ersten Zeile der Partition, daher gibt die Funktion ohne eigenen Rahmen den ersten Wert der Partition zurück.

Der Rahmen legt fest, welche Zeilen der Partition die Funktion sieht, und wird nach ORDER BY geschrieben: ROWS BETWEEN start AND end zählt Zeilen, während RANGE BETWEEN start AND end die Werte aus ORDER BY verwendet.

GrenzeBedeutung
UNBOUNDED PRECEDINGDie erste Zeile der Partition
n PRECEDINGn Zeilen vor der aktuellen
CURRENT ROWDie aktuelle Zeile
n FOLLOWINGn Zeilen nach der aktuellen
UNBOUNDED FOLLOWINGDie letzte Zeile der Partition

Ohne Rahmen gilt die Standardregel. Hat OVER ein ORDER BY, reicht der Rahmen vom Anfang der Partition bis zur aktuellen Zeile, einschließlich der Zeilen mit demselben Wert in ORDER BY. Ohne ORDER BY ist der Rahmen die ganze Partition.

Siehe auch

Wo du es lernst