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