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;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;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.