Sé que esta es una pregunta bastante antigua, pero acabo de analizar un pequeño ejemplo en mi cabeza que me ayudó a comprender por qué Postgres tiene esta restricción aparentemente extraña en las columnas SELECT DISTINCT / ORDER BY.
Imagina que tienes los siguientes datos en tu tabla Rsvp:
event_id | start_time
----------+------------------------
0 | Mar 17, 2013 12:00:00
1 | Jan 1, 1970 00:00:00
1 | Aug 21, 2013 16:30:00
2 | Jun 9, 2012 08:45:00
Ahora desea obtener una lista de event_ids distintos, ordenados por sus respectivos start_times. Pero, ¿dónde debería 1
¿Vamos? ¿Debería ser el primero, porque la tupla comienza el 1 de enero de 1970, o debería ser el último debido al 21 de agosto de 2013?
Como el sistema de la base de datos no puede tomar esa decisión por usted y la sintaxis de la consulta no puede depender de los datos reales en los que podría estar operando (suponiendo que event_id
es único), estamos restringidos a ordenar solo por columnas del SELECT
cláusula.
En cuanto a la pregunta real, una alternativa a la respuesta de Matthew es usar una función agregada como MIN
o MAX
para la clasificación:
SELECT event_id
FROM Rsvp
GROUP BY event_id
ORDER BY MIN(start_time)
La agrupación y agregación explícitas en start_time
permitir que la base de datos genere un orden inequívoco de las tuplas resultantes. Tenga en cuenta, sin embargo, que la legibilidad es definitivamente un problema en este caso;)