Django,最后一天的总金额是多少?

时间:2019-09-06 14:05:54

标签: django django-orm

class Point(models.Model):
   user = models.ForeignKey(User)
   expire_date = models.DateField()
   amount = models.IntegerField()

我想知道给定用户最近一次到期日期的金额

一个用户可能有多个points,而一个用户expire_date

我可以做两个查询来获取这些的第一个expire_dateaggregate。但想知道是否有更好的方法。

1 个答案:

答案 0 :(得分:0)

我们可以在此处使用子查询:

from django.db.models import Sum

Point.objects.filter(
    expire_date__gte=Point.objects.order_by('-expire_date').values('expire_date')[:1]
).aggregate(total=Sum('amount'))

因此,这将导致查询如下:

SELECT SUM(point.amount) AS total
FROM point
WHERE point.expire_date >= (
    SELECT U0.expire_date
    FROM point U0
    ORDER BY U0.expire_date DESC
    LIMIT 1
)

我尚未对其进行性能测试,因此建议您首先尝试衡量这是否会显着提高性能。