django 子组最大值的总和

django aggregate sum of subgroup maximums

我在 Django 中有以下简化设置,使用 MySQL:

class Category(models.Model):
    name = models.CharField(max_length=255)

class MyTable(models.Model):
    category = models.ForeignKey('Category', on_delete=models.CASCADE)
    date = models.DateField()
    amount = models.IntegerField()
    class Meta:
        unique_together = ['category', 'date']

查询集包含 MyTable 的以下示例数据:

date        category_id amount
2017-12-01  3           2
2018-01-01  1           100
2018-02-01  1           50
2018-03-01  2           2000
2018-04-01  2           4000
2018-05-01  3           2
2018-06-01  3           1

我最终想要的是一种获取每个category对应于最新dateamount的总和的方法。举例说明:

我想弄清楚如何通过对此查询集的聚合调用来获取值 4051。我已经尝试了我能想到的 "values"、"annotate" 和 "aggregate" 的所有组合,但都没有得到想要的结果。以下为我提供了每个 category 的最新日期,但每次我尝试获取相应 amount 的总和时,它都会在 每个 amount 而不仅仅是最大值。

MyTable.objects.values('category').annotate(Max('date'))

我正在尝试通过 Django 的 ORM 实现吗?我发布了另一个关于此示例的 MySQL 语法的问题,但也无法将其应用于 Django 查询集。

感谢任何指导。

我认为你需要一些数据结构来实现这个如果 Djnago ORM 或 sql 不符合你的要求(无法编写)请看下面的答案

l=[]
x=MyTable.objects.values('category').annotate(date=Max('date'))
for y in x:
    qq= MyTable.objects.get(category_id=y.get(category),date=y.get(date))
    l=l+qq.amount
total_amount = sum(l)
print(total_amount)