groupe par date fonction d'agrégation dans postgresql
J'obtiens une erreur d'exécution de cette requête
SELECT date(updated_at), count(updated_at) as total_count
FROM "persons"
WHERE ("persons"."updated_at" BETWEEN '2012-10-17 00:00:00.000000' AND '2012-11-07 12:25:04.082224')
GROUP BY date(updated_at)
ORDER BY persons.updated_at DESC
Je reçois le message d'erreur ERREUR: la colonne "personnes.updated_at" doit apparaître dans la clause GROUP BY ou être utilisé dans une fonction d'agrégation (LIGNE 5): à l'ORDRE PAR des personnes.updated_at DESC
Cela fonctionne, si je retire la date( en fonction du groupe en appel, mais je suis en utilisant la fonction date, parce que je veux du groupe par date, datetime
toutes les idées
OriginalL'auteur Chris Baxter | 2012-11-07
Vous devez vous connecter pour publier un commentaire.
Pour le moment il est difficile de savoir ce que vous voulez Postgres pour le retour. Vous dites qu'il faut commander par
persons.updated_at
mais vous ne pouvez pas récupérer le champ de la base de données.Je pense que, ce que vous voulez faire est:
Maintenant vous indiquez explicitement à la DB pour trier en fonction de la valeur obtenue à partir du DÉCOMPTE total. Vous pouvez également utiliser:
ORDER BY 2 DESC
, effectivement dire la base de données à trier par la deuxième colonne dans le jeu de résultats. Cependant je préfère indiquer explicitement la colonne pour plus de clarté.Note que je suis actuellement dans l'impossibilité de tester cette requête, mais je ne pense que cela devrait fonctionner.
OriginalL'auteur pyrocumulus
le problème est que, parce que vous êtes regroupement par
date(updated_at)
, la valeur deupdated_at
peut ne pas être unique, différent des valeurs deupdated_at
pouvez retourner la même valeur pourdate(updated_at)
. Vous devez dire à la base de données qui des valeurs possibles, il est recommandé d'utiliser, ou alternativement utiliser la valeur retournée par le groupe, probablement l'un desou
min()
dans leORDER BY
sauvé ma journée!OriginalL'auteur SingleNegationElimination