2009-11-03 5 views
5

PostgreSQL은 작은 동물을 펀치하게 만듭니다. MySQL에 대해 다음과 같은 SQL 문을 사용하여 고유 한 도시/주/국가 목록을 가져옵니다. PostgreSQL에서 DISTINCT 및 ORDER BY를 어떻게 수행합니까?

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

그러나

즉 PostgreSQL의이 오류가 던져 만드는 일 :

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

을하지만이 SELECT에 occured_at 추가하는 경우, 다음은 고유 목록을 다시 얻는 죽인다. MySQL과 첫 번째 쿼리를 사용하여

결과 :

BEDFORD PARK  IL US 
ADDISON   IL US 
HOUSTON   TX US 

결과 나는 SELECT에 occured_at 추가하는 경우 :

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 

결과의 첫 번째 세트는 내가 궁극적으로 PostgreSQL을 함께 얻기 위해 노력하고있어입니다 .

답변

5

글쎄, 어떻게 정렬 순서를 만드는 데 사용할 occured_at 값을 결정하는 것이 Postgres에 기대 하시겠습니까?

나는 특히 포스트 그레스 구문을 모르지만, 당신이 시도 할 수 :

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

또는 가장 최근의 사건으로 정렬 결과를 원하는 가정 것

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 

. 첫 번째 발생을 원하면 MAX에서 MIN으로 변경하십시오.

덧붙여서, 귀하의 제목은 GROUP BY에 대해 묻지 만 귀하의 구문은 DISTINCT를 지정합니다.

+0

래리, 그 두 번째 트릭 않았다. 그리고 제목의 GROUP BY에 대해 유감으로 생각합니다. 두뇌는 백 가지의 다른 것들을 시도하는 것이기 때문에 제 마음은 어딘가에있었습니다. :) – Shpigford

+0

항상 누군가를 도울 수있는 즐거움. –

관련 문제