So che questa è una domanda piuttosto vecchia, ma ho appena passato un piccolo esempio nella mia testa che mi ha aiutato a capire perché Postgres ha questa restrizione apparentemente strana sulle colonne SELECT DISTINCT / ORDER BY.
Immagina di avere i seguenti dati nella tua tabella 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
Ora vuoi prendere un elenco di event_id distinti, ordinati in base ai rispettivi orari di inizio. Ma dove dovrebbe 1
andare? Dovrebbe venire prima, perché l'unica tupla inizia il 1 gennaio 1970, o dovrebbe durare a causa del 21 agosto 2013?
Poiché il sistema di database non può prendere questa decisione per te e la sintassi della query non può dipendere dai dati effettivi su cui potrebbe operare (supponendo event_id
è unico), siamo limitati a ordinare solo per colonne da SELECT
clausola.
Per quanto riguarda la domanda vera e propria, un'alternativa alla risposta di Matthew è usare una funzione aggregata come MIN
o MAX
per l'ordinamento:
SELECT event_id
FROM Rsvp
GROUP BY event_id
ORDER BY MIN(start_time)
Il raggruppamento e l'aggregazione espliciti su start_time
consentire al database di elaborare un ordinamento inequivocabile delle tuple dei risultati. Nota, tuttavia, che la leggibilità è sicuramente un problema in questo caso;)