使用 Django Query 求和每一天的最大值

Mat*_*imB 0 django django-models django-orm django-queryset

我的项目有一个模型,如下所示:

class Data(Model):
    data = FloatField(verbose_name='Data', null=True, blank=True)
    created_at = DateTimeField(verbose_name='Created at')
Run Code Online (Sandbox Code Playgroud)

我的应用程序每天会创建数百个此模型的日志。

我试图只对每天的最大值求和,而不必遍历它们(仅使用 Django 查询)。

是否可以不编写 SQL 查询?

PS:我能够获得每天最大的“数据”,因此当前的逻辑会迭代几天并总结每天的最大值。但是该解决方案变得太慢了,我想直接将其解决到 db 级别。

End*_*oth 5

用于救援的注释和聚合:

from django.db.models import Sum, Max
from django.db.models.functions import Trunc

report = (Data.objects
    .annotate(day=Trunc('created_at', 'day'))
    .values('day')
    .annotate(greatest=Max('data'))
    .values('greatest')
    .aggregate(total=Sum('greatest'))
)

print(report['total'])
Run Code Online (Sandbox Code Playgroud)

生成的 SQL 几乎比代码简单:

SELECT SUM("greatest")
FROM
  (SELECT MAX("app_data"."data_id") AS "greatest"
   FROM "app_data"
   GROUP BY DATE_TRUNC('day', "app_data"."created_at")) subquery
Run Code Online (Sandbox Code Playgroud)