Jag vet att det här är en ganska gammal fråga, men jag gick precis igenom ett litet exempel i mitt huvud som hjälpte mig att förstå varför Postgres har denna till synes udda begränsning på SELECT DISTINCT / ORDER BY kolumner.
Föreställ dig att du har följande data i din Rsvp-tabell:
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 vill du ta en lista över distinkta event_id, sorterade efter deras respektive starttider. Men var ska 1
gå? Ska den komma först, eftersom den ena tupeln börjar den 1 januari 1970, eller ska den gå sist på grund av den 21 augusti 2013?
Eftersom databassystemet inte kan fatta det beslutet åt dig och syntaxen för frågan inte kan bero på de faktiska data som den kan arbeta på (förutsatt att event_id
är unik), är vi begränsade till att endast beställa efter kolumner från SELECT
klausul.
När det gäller själva frågan - ett alternativ till Matthews svar är att använda en aggregatfunktion som MIN
eller MAX
för sorteringen:
SELECT event_id
FROM Rsvp
GROUP BY event_id
ORDER BY MIN(start_time)
Den explicita grupperingen och aggregeringen på start_time
tillåta databasen att komma med en entydig ordning av resultattuplarna. Observera dock att läsbarhet definitivt är ett problem i det här fallet;)