2013-06-05 15 views
7

dan SEÇ, ben en yüksek endeks ile satırdan değerlere almak için sorgu yazmaya çalışıyorum 'my_id parametresini':PostgreSQL, PG 9.1 üzerinde libpq kullanarak maksimum id

ERROR: aggregates not allowed in WHERE clause...

: bana hata veriyor

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

Böyle bir sorgu nasıl düzgün yazılır?

cevap

19

kullanın, ardından aşağıdaki sorgu aynı hedefe ulaşmak gerekir.

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

Bu kadar, teşekkürler. Sadece bir tane kabul edebilirim (en hızlı) ama tüm cevaplar yardımcı oldu, üzgünüm. –

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

veya hedef en yüksek my_id değeri ile satır almak için ise

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

Hemen düzen ve başka ama yeterli performansı yol olacağını limit 1

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

ile sadece ilk kayıt almak

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

Alt sorgu size

SELECT my_id, col2, col3 FROM mytable WHERE my_id = (select MAX(my_id) FROM mytable) 
yardımcı olabilir
0

my_id üzerinde bir indeksiniz varsa alt sorguya sahip olanlar daha hızlı olmalıdır. bir indeks yoksa "siparişi" al. (obv, ilgili ise veritabanı boyutuna bağlıdır)

+0

Muhtemelen diğer yolu. Postgres, bir dizinin geçerli olduğu 'LIMIT 1' sorgularını optimize eder. –