【发布时间】:2020-08-21 07:18:00
【问题描述】:
有一个如下的 db (mysql) 表:
class AccountsInsightsHourly(models.Model):
account_id = models.CharField(max_length=32, blank=True, null=True)
spend = models.DecimalField(max_digits=12, decimal_places=2, blank=True, null=True)
date = models.IntegerField(blank=True, null=True)
hour = models.IntegerField(blank=True, null=True)
created_time = models.DateTimeField(blank=True, null=True)
class Meta:
managed = False
db_table = 'accounts_insights_hourly'
unique_together = (('account_id', 'date', 'hour'),)
ordering = ["account_id", "hour"]
有些数据保存在 db 中是这样的:
id account_id spend date hour created_time
1 1222 200 20200820 12 ....
1 1222 300 20200820 14 ....
我尝试获取每个帐户在指定日期的最大支出。
base_queryset_yesterday = AccountsInsightsHourly.objects.filter(date=date_yesterday). \
annotate(yesterday_spend=Max("spend", output_field=FloatField())). \
values("account_id", "yesterday_spend")
# I got results like below
<QuerySet [{'account_id': '1222', 'yesterday_spend': 200}, {'account_id': '1222', 'yesterday_s
pend': 300}]>
# expected result is
<QuerySet [{'account_id': '1222', 'yesterday_spend': 300}>
如何使注释按预期工作?
更新
感谢ruddra 的帮助,正确的查询集应该是
base_queryset_yesterday = AccountsInsightsHourly.objects.filter(date=date_yesterday).values("account_id"). \
annotate(yesterday_spend=Max("spend", output_field=FloatField())). \
values("account_id", "yesterday_spend").\
order_by()
【问题讨论】:
标签: django