2009-11-03 12 views
5

PostgreSQL wird mich dazu bringen, kleine Tiere zu schlagen. Ich mache die folgende SQL-Anweisung für MySQL, um eine Liste von Städten/Staaten/Ländern zu erhalten, die einzigartig sind.Wie mache ich eine DISTINCT und ORDER BY in PostgreSQL?

SELECT DISTINCT city 
       , state 
       , country 
      FROM events 
      WHERE (city > '') 
      AND (number_id = 123) 
     ORDER BY occured_at ASC 

Aber tun, dass PostgreSQL diesen Fehler werfen macht:

PGError: ERROR: for SELECT DISTINCT, ORDER BY expressions must appear in select list

Aber wenn ich occured_at zum SELECT hinzufügen, dann tötet es immer die eindeutige Liste zurück.

Ergebnisse mit MySQL und erste Abfrage:

BEDFORD PARK  IL US 
ADDISON   IL US 
HOUSTON   TX US 

Ergebnisse, wenn ich hinzufügen occured_at zum SELECT:

BEDFORD PARK  IL US 2009-11-02 19:10:00 
BEDFORD PARK  IL US 2009-11-02 21:40:00 
ADDISON   IL US 2009-11-02 22:37:00 
ADDISON   IL US 2009-11-03 00:22:00 
ADDISON   IL US 2009-11-03 01:35:00 
HOUSTON   TX US 2009-11-03 01:36:00 

Der erste Satz von Ergebnissen ist, was ich letztlich mit PostgreSQL zu bekommen versuchen, .

Antwort

5

Nun, wie würden Sie von Postgres erwarten, welchen Wert occurated_at beim Erstellen der Sortierreihenfolge zu bestimmen?

Ich weiß nicht, Postgres Syntax besonders, aber man könnte versuchen:

SELECT DISTINCT city, state, country, MAX(occured_at) 
     FROM events 
     WHERE (city > '') AND (number_id = 123) ORDER BY MAX(occured_at) ASC 

oder

SELECT city, state, country, MAX(occured_at) 
     FROM events 
     WHERE (city > '') AND (number_id = 123) 
     GROUP BY city, state, country ORDER BY MAX(occured_at) ASC 

das ist vorausgesetzt, Sie die Ergebnisse durch die jüngsten Auftreten bestellt werden soll. Wenn Sie das erste Vorkommen möchten, ändern Sie MAX in MIN.

Übrigens fragt Ihr Titel nach GROUP BY, aber Ihre Syntax spezifiziert DISTINCT.

+0

Larry, der zweite hat den Trick gemacht. Und sorry wegen der GROUP BY im Titel ... Gehirn ist viel davon, über hundert verschiedene Dinge zu versuchen und so war mein Verstand woanders. :) – Shpigford

+0

Immer ein Vergnügen, jemanden aushelfen zu können. –

Verwandte Themen