2009-11-03 31 views
5

PostgreSQL sắp sửa bắt tôi làm động vật nhỏ. Tôi đang thực hiện câu lệnh SQL sau đây cho MySQL để có được một danh sách thành phố/tiểu bang/quốc gia duy nhất.Làm cách nào để thực hiện DISTINCT và ORDER BY trong PostgreSQL?

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

Nhưng làm điều đó làm cho PostgreSQL ném lỗi này:

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

Nhưng nếu tôi thêm occured_at để SELECT, sau đó nó giết nhận lại danh sách duy nhất.

Kết quả sử dụng MySQL và truy vấn đầu tiên:

BEDFORD PARK  IL US 
ADDISON   IL US 
HOUSTON   TX US 

Kết quả nếu tôi thêm occured_at để 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 

Tập đầu tiên của kết quả là những gì tôi đang cố gắng để cuối cùng nhận được với PostgreSQL .

Trả lời

5

Vâng, bạn mong đợi Postgres xác định giá trị nào được sử dụng để tạo thứ tự sắp xếp?

Tôi không biết cú pháp Postgres đặc biệt, nhưng bạn có thể thử:

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

hoặc

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 

Đó là giả sử bạn muốn các kết quả theo yêu cầu của sự xuất hiện gần đây nhất. Nếu bạn muốn lần xuất hiện đầu tiên, hãy thay đổi MAX thành MIN.

Ngẫu nhiên, tiêu đề của bạn hỏi về GROUP BY, nhưng cú pháp của bạn chỉ định DISTINCT.

+0

Larry, người thứ hai đã thực hiện thủ thuật. Và xin lỗi về GROUP BY trong tiêu đề ... bộ não là rất nhiều từ cố gắng về một trăm điều khác nhau và vì vậy tâm trí của tôi là ở một nơi khác. :) – Shpigford

+0

Luôn luôn là một niềm vui để có thể giúp đỡ một ai đó. –

Các vấn đề liên quan