Django ORM查询GROUP BY由MAX组合的多个列

Tha*_*ris 11 python mysql orm django-models

我正在使用Django和MySQL.我有一个类似于以下的模型:

class MM(models.Model):
    a = models.IntegerField()
    b = models.IntegerField()
    c = models.DateTimeField(auto_now_add=True)
Run Code Online (Sandbox Code Playgroud)

我有多行a等于b,我想执行以下SQL查询:

SELECT a, b, MAX(c) AS max FROM MM GROUP BY b, a;
Run Code Online (Sandbox Code Playgroud)

如何用Django ORM完成这项工作?我尝试了使用注释的不同方法,但现在运气到目前为止.

非常感谢!

小智 11

我想你可以这样做:

MM.objects.all().values('b', 'a').annotate(max=Max('c'))
Run Code Online (Sandbox Code Playgroud)

请注意,您需要导入一些内容才能使用Max: from django.db.models import Max

values('b', 'a')将给出GROUP BY b, a并将annotate(...)在您的查询中计算MAX.

  • 仅供参考,`all()`是多余的,不是必需的. (3认同)