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?
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
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)
Sous requête peut vous aider
SELECT my_id, col2, col3 FROM mytable WHERE my_id = (select MAX(my_id) FROM mytable)
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
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)