首页 > 解决方案 > Django - 按最新日期/列检索唯一行

问题描述

我有下表:

class AccountData(models.Model):
    id = models.BigIntegerField(primary_key=True)
    date = models.DateField()
    last_update = models.DateTimeField()
    account = models.ForeignKey('Account', models.DO_NOTHING, db_column='account', related_name="values")
    value = models.DecimalField(max_digits=65535, decimal_places=65535, blank=True, null=True)

给定一个查询集/ID列表(未知数量有多少ID,可能是None/0)

有没有办法获取每个帐户的最新行,然后对值求和?

我真正苦苦挣扎的部分只是检索每个帐户的最新行。

我知道我可以通过执行以下操作获取给定查询集中的帐户:

accounts = [1, 4, 65]
AccountData.objects.filter(account__in=accounts)

只需要弄清楚我如何才能获得“日期”尽可能接近“现在”的行。从而导致具有唯一行(每个帐户只有 1 行)

标签: pythondjangoorm

解决方案


结合使用 order by 和 distinct 来解决您的问题

AccountData.objects.order_by('-date').distinct('account_number')

进一步总结价值使用总量

from django.db.models import Sum  
AccountData.objects.order_by('-date').distinct('account_number').aggregate(sum=Sum('value'))['sum'] or 0

推荐阅读