python - 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 行)
解决方案
结合使用 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
推荐阅读
- unity3d - 防止对撞机在地形中发生故障
- javascript - 计算距离未来日期的时间 - 在变量中正确格式化日期的问题
- php - 获取数组的索引
- sql - 如何在 postgresql 中为不同的表使用嵌套函数?
- amazon-web-services - AWS SNS,向 slack 发送“连续”通知
- firebase - Google Cloud 函数的权限问题
- javascript - 如何将文件从本地主机发送到网站
- class - 对“位置”的未定义引用
::treeHeight' 在类模板构造函数中 - spring-boot - Spring Boot 2 + Spring Security + 登录表单 + Session Redis 不工作
- vue.js - 从存储在 vuex 中的 axios 获取未定义的 response.data