Jeg ved godt, at dette er et ret gammelt spørgsmål, men jeg har lige gennemgået et lille eksempel i mit hoved, som hjalp mig med at forstå, hvorfor Postgres har denne tilsyneladende mærkelige begrænsning på SELECT DISTINCT / ORDER BY kolonner.
Forestil dig, at du har følgende data i din Rsvp-tabel:
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
Nu vil du have fat i en liste over forskellige begivenheds-id'er, sorteret efter deres respektive starttider. Men hvor skal 1
gå? Skal den komme først, fordi den ene tuple starter den 1. januar 1970, eller skal den gå sidst på grund af den 21. august 2013?
Da databasesystemet ikke kan træffe den beslutning for dig, og syntaksen for forespørgslen ikke kan afhænge af de faktiske data, det muligvis opererer på (forudsat event_id
er unik), er vi begrænset til kun at bestille efter kolonner fra SELECT
klausul.
Hvad angår det faktiske spørgsmål - et alternativ til Matthews svar er at bruge en aggregeret funktion som MIN
eller MAX
til sorteringen:
SELECT event_id
FROM Rsvp
GROUP BY event_id
ORDER BY MIN(start_time)
Den eksplicitte gruppering og aggregering på start_time
tillade databasen at komme med en entydig rækkefølge af resultattupler. Bemærk dog, at læsbarheden bestemt er et problem i dette tilfælde;)