SQL Academy
Premium
Funktionsreferenz

DISTINCT ON

SQL-Konstrukt

Behält eine Zeile für jeden Wert der Ausdrücke in Klammern, die erste in der Reihenfolge von ORDER BY.

PostgreSQL 17.5
SELECT DISTINCT ON (expression[, ...]) column[, ...] FROM table ORDER BY expression[, ...]

Parameter

expression
Ausdrücke, nach denen Zeilen als Duplikate gelten
column
Spalten des Ergebnisses
tableName
Tabelle, aus der die Zeilen gewählt werden
ORDER BY
Reihenfolge der Zeilen: beginnt mit denselben Ausdrücken wie DISTINCT ON, die folgenden Spalten bestimmen, welche Zeile übrig bleibt

Rückgabewert

Menge von Zeilen, eine für jeden eindeutigen Wert von expression

Beispiele

Ältestes Mitglied in jedem Status

PostgreSQL 17.5
SELECT DISTINCT ON (status) status,
	member_name,
	birthday
FROM FamilyMembers
ORDER BY status,
	birthday;
statusmember_namebirthday
daughterLela Quincey1985-06-07
fatherHeadley Quincey1960-05-13
motherFlavia Quincey1963-02-16
sonAndie Quincey1983-06-05

Letzte Zahlung jedes Familienmitglieds

PostgreSQL 17.5
SELECT DISTINCT ON (family_member) family_member,
	date,
	good,
	unit_price
FROM Payments
ORDER BY family_member,
	date DESC;
family_memberdategoodunit_price
12006-03-12510
22005-10-231466000
32006-01-1210100
42005-07-267150
52005-12-2215250

Details

Das ist eine Erweiterung von PostgreSQL: In MySQL löst du dieselbe Aufgabe mit ROW_NUMBER() in einer Unterabfrage.

Ohne ORDER BY ist die übrig bleibende Zeile beliebig. Beginnt ORDER BY mit anderen Ausdrücken, bricht die Abfrage mit einem Fehler ab.

Siehe auch