我们运行 Postgres 9.6.5 和 Django 2.0。我们有一个Model
with 字段created_at
和value
. 我们需要计算某个 90 天移动平均线date_range
。这就是我们这样做的方式:
output = []
for i in range(len(date_range)):
output.append(
Model.objects.filter(
created_at__date__range=(date_range[i]-timezone.timedelta(days=90), date_range[i]),
).aggregate(Avg('value'))['value__avg'].days
)
这使用Avg
聚合函数,因此速度相当快,但是我们需要对date_range
. 对于更长的范围,这意味着很多查询。
Postgres 可以在单个查询中做到这一点。我的问题是——我们能以某种方式在使用 Django ORM 的单个查询中做到这一点吗?
(我知道我可以使用 Django ORM 执行原始 SQL,但我想尽可能避免这种情况,这就是我问的原因。)