Referencia de funciones

DISTINCT ON

Construcción SQL

Deja una fila por cada valor de las expresiones entre paréntesis: la primera en el orden de ORDER BY.

PostgreSQL 17.9
SELECT DISTINCT ON (expression[, ...]) column[, ...] FROM table ORDER BY expression[, ...]
  • [ ]parte opcional
  • ...se puede repetir
expression
Expresiones según las cuales las filas se consideran duplicadas
column
Columnas del resultado
table
Tabla de la que se eligen las filas
Nombre
ORDER BY
Orden de las filas: empieza por las mismas expresiones que DISTINCT ON, y las columnas siguientes deciden qué fila se queda

Valor devuelto

Conjunto de filas, una por cada valor único de expression

Ejemplos

Miembro de más edad de cada estado

PostgreSQL 17.9
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

Último pago de cada miembro de la familia

PostgreSQL 17.9
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

Detalles

Es una extensión de PostgreSQL: en MySQL, la misma tarea se resuelve con ROW_NUMBER() en una subconsulta.

Sin ORDER BY, la fila que se queda es arbitraria. Si ORDER BY empieza por otras expresiones, la consulta termina con un error.

Véase también