Django中日期范围的平均值

时间:2017-12-06 23:23:09

标签: python django postgresql

我正在尝试在Django中构建一个查询,该查询将在一定范围内获取(即平均)的平均值相加。

以下是相关的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)

在我的查询中,我试图在一段时间内对网站的数据进行平均,然后对每个时间范围的平均值求和。这是我到目前为止的查询,我相信只是在一段时间内得到所有网站数据的平均值。

        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')

你知道我怎么办吗?我正在和Postgres一起使用Django。

谢谢!

1 个答案:

答案 0 :(得分:1)

如果您添加' site'你的.values()子句,如下所示:

.values('date_slice', 'site')

并删除order_by,这将导致' created_on'要添加到生成的SQL GROUP BY的字段,您应该获得每个切片+站点的两次测量的平均值。然后,您可以对这些值求和,以获得所有站点的总计。