2013-06-05 40 views
7

Bằng cách sử dụng libpq trên PG 9.1, tôi đang cố gắng để viết truy vấn để có được giá trị từ hàng với chỉ số cao nhất 'my_id':PostgreSQL, SELECT từ id max

SELECT my_id, col2, col3 
FROM mytable 
WHERE my_id = MAX(my_id) 

Đó mang lại cho tôi lỗi:

ERROR: aggregates not allowed in WHERE clause...

Cách viết truy vấn như vậy đúng cách?

Trả lời

19

Nếu mục tiêu của bạn là để có được hàng với giá trị my_id cao nhất, sau đó truy vấn sau đây cần đạt được cùng một mục tiêu.

SELECT my_id, col2, col3 
FROM mytable 
ORDER BY my_id DESC 
LIMIT 1 
+0

Đó là nó, cảm ơn. Tôi chỉ có thể chấp nhận một (nhanh nhất) nhưng tất cả các câu trả lời đều giúp, xin lỗi. –

2
SELECT my_id, col2, col3 FROM mytable WHERE my_id = (select MAX(my_id) FROM mytab) 

hoặc sử dụng

SELECT my_id, col2, col3 FROM mytable ORDER BY my_id DESC LIMIT 1 
5

trật tự Chỉ bằng my_id và chỉ mất kỷ lục đầu tiên với limit 1

SELECT my_id, col2, col3 
FROM mytable 
order by my_id desc 
limit 1 

Một nhưng cách ít performant sẽ

SELECT my_id, col2, col3 
FROM mytable 
where my_id = (select max(my_id) from mytable) 
4

truy vấn Sub có thể giúp bạn

SELECT my_id, col2, col3 FROM mytable WHERE my_id = (select MAX(my_id) FROM mytable) 
0

khi bạn có chỉ mục trên my_id, các chỉ mục có truy vấn phụ sẽ nhanh hơn. khi bạn không có một chỉ mục lấy "order by". (obv. phụ thuộc vào kích thước cơ sở dữ liệu nếu có liên quan)

+0

Có lẽ là cách khác. Postgres tối ưu hóa các truy vấn 'LIMIT 1' trong đó chỉ mục có thể áp dụng. –

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