class Point(models.Model):
user = models.ForeignKey(User)
expire_date = models.DateField()
amount = models.IntegerField()
我想知道给定用户最近一次到期日期的金额
一个用户可能有多个points
,而一个用户expire_date
我可以做两个查询来获取这些的第一个expire_date
和aggregate
。但想知道是否有更好的方法。
答案 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
)
我尚未对其进行性能测试,因此建议您首先尝试衡量这是否会显着提高性能。