En utilisant Django, je souhaite générer un jeu de requête avec des statistiques journalières en agrégeant à partir d'une table avec plusieurs entrées par jour. Voici la tableAgrégation de données dans une seule table avec Django
CREATE TABLE weather
(
id serial NOT NULL,
air_temp double precision NOT NULL,
obs_date date,
....
)
Ceci est l'équivalent SQL du résultat que je veux obtenir ce dans le queryset
select obs_date, avg(air_temp) from weather group by obs_date order by obs_date
Le modèle Django ressemble à ceci
class WeatherData(models.Model):
obs_date = models.DateField('Obs Date', blank=False, null=False, db_index=True)
air_temp = models.FloatField('Air Temp', blank=False, null=False)
...
J'ai lu ce http://docs.djangoproject.com/en/dev/topics/db/aggregation/ mais ne peut pas voir comment le faire. Suggestions appréciées.
Mise à jour: cela fonctionne:
WeatherData.objects.values('obs_date').annotate(max_air=Max('air_temp'), min_air=Min('air_temp'))
Cela ne fonctionne pas, mais il m'a mis sur la bonne voie. Là où cela ne va pas, tous les champs de la table se retrouvent dans le GROUP BY généré par Django. Si vous insérez .values () avant l'annotation, vous obtenez le bon résultat –