2013-06-05 15 views
7

Durch die Verwendung von libpq auf PG 9.1, ich versuche Abfrage zu schreiben Werte von Reihe zu bekommen mit dem höchsten Index 'MY_ID':PostgreSQL, SELECT von max id

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

Das bin ich Fehler gibt:

ERROR: aggregates not allowed in WHERE clause...

Wie schreibe ich solche Abfrage richtig?

Antwort

19

verwenden Wenn Ihr Ziel ist die Zeile mit dem höchsten my_id Wert zu erhalten ist, dann sollte die folgende Abfrage das gleiche Ziel zu erreichen.

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

Das ist es, danke. Ich kann nur einen (schnellsten) akzeptieren, aber alle Antworten haben geholfen, sorry. –

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

oder

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

Gerade Auftrag von my_id und nur den ersten Datensatz nehmen mit limit 1

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

Eine weitere, aber weniger performant Weg

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

Sub-Abfrage Sie können helfen

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

Wenn Sie einen Index für my_id haben, sollten die mit der Unterabfrage schneller sein. Wenn Sie keinen Index haben, nehmen Sie die "Bestellung von". (obv. hängt von der Datenbankgröße ab, wenn relevant)

+0

Wahrscheinlich anders herum. Postgres optimiert "LIMIT 1" -Abfragen, bei denen ein Index anwendbar ist. –