web-dev-qa-db-fra.com

PostgreSQL, SELECT à partir de max id

En utilisant libpq sur PG 9.1, j'essaie d'écrire une requête pour obtenir les valeurs de la ligne avec l'index le plus élevé 'my_id':

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

Cela me donne une erreur:

ERREUR: les agrégats ne sont pas autorisés dans la clause WHERE ...

Comment écrire une telle requête correctement?

10
Wine Too

Si votre objectif est d'obtenir la ligne avec la valeur my_id la plus élevée, la requête suivante doit atteindre le même objectif. 

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

Il suffit de commander par my_id et de ne prendre que le premier enregistrement avec limit 1

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

Une autre manière moins performante serait

SELECT my_id, col2, col3
FROM mytable 
where my_id = (select max(my_id) from mytable)
7
juergen d

Sous requête peut vous aider 

SELECT my_id, col2, col3 FROM mytable WHERE my_id = (select MAX(my_id) FROM mytable)
5
Muhammad Hisham
SELECT my_id, col2, col3 FROM mytable WHERE my_id = (select MAX(my_id) FROM mytab)

ou utiliser

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

quand vous avez un index sur my_id, ceux avec la sous-requête devraient être plus rapides. quand vous n'avez pas d'index, prenez la commande par ordre. (obv. dépend de la taille de la base de données si nécessaire)

0
Chris