2017-12-06 1 views
0

Ich versuche, eine Abfrage in Django zu erstellen, die gemittelte Mittelwerte (d. H. Gemittelt) über einen bestimmten Zeitraum summiert.Summenmittel über Datumsbereiche in Django

ist hier das entsprechende Modell Django:

class Data(models.Model): 

    class Meta: 
     verbose_name_plural = "Data" 

    site = models.ForeignKey(Site) 
    created_on = models.DateTimeField(auto_created=True) 
    reported_on = models.DateTimeField(null=True, blank=True) 
    baseline_power_kw = models.FloatField('Baseline Power (kw)', blank=True, null=True) 
    measured_power_kw = models.FloatField('Measured Power (kw)', blank=True, null=True) 

In meiner Anfrage, ich versuche, eine Reihe von Zeiten durchschnittlichen Websites Daten über und dann diese Mittelwerte für jeden Zeitbereich summieren. Hier ist die Abfrage, die ich bisher habe, die ich glaube, dass nur der Durchschnitt der Daten aller Seiten über eine Reihe von Zeiten erhalten wird.

 t_data = Data.objects.filter(site__in=sites) \ 
            .filter(created_on__range=(start, end)) \ 
            .extra(select={'date_slice': "trunc(extract(epoch from created_on)/'60')"}) \ 
            .values('date_slice') \ 
            .annotate(avg_baseline_power_kw=Avg('baseline_power_kw'), 
              avg_measured_power_kw=Avg('measured_power_kw'), 
              time=Min('created_on')) \ 
            .order_by('-created_on') 

Wissen Sie, wie ich fortfahren kann? Ich benutze Django mit Postgres.

Danke!

Antwort

1

Wenn Sie hinzufügen ‚Standort‘ zu Ihrem .values ​​() Klausel, wie folgt aus:

.values('date_slice', 'site') 

und die order_by entfernen, was bewirkt, dass der ‚created_on‘ Feld der erzeugten SQL GROUP BY hinzugefügt werden , sollten Sie Durchschnittswerte für Ihre zwei Messungen für jede Schicht + Website erhalten. Sie können diese Werte dann addieren, um die Gesamtsummen über alle Standorte zu erhalten.

Verwandte Themen