mysql - Django ORM : group records by a field and then get the records with max field value in each group

标签 mysql django django-orm

我有这样一个模型:

Class Foo(model.Models):
    date = models.DateField()
    price = models.FloatField()
    volume = models.IntegerField()

我想获得每天价格最高的所有元素的列表!像这样:

{
   2017-01-01: {"date": 2017-01-01, "price": 1000, "volume": 210},
   2017-01-02: {"date": 2017-01-02, "price": 1032, "volumne": 242},
   .
   .
   .
}

我可以用一个查询来做到这一点吗?数据库相对较大,对日期执行循环是行不通的。

最佳答案

您可以这样做以获得特定日期的最高价格

from django.db.models import Max

Foo.objects.values('date').annotate(max_price=Max('price'))

编辑:如果您想获得特定日期的最高价格的整个对象,您可以通过 Django 1.11 支持的 OuterRefSubquery 来实现

from django.db.models import Max, Subquery, OuterRef

subquery = Foo.objects.filter(date=OuterRef('date')).order_by('-price')
queryset = Foo.objects.filter(price=Subquery(subquery.values('price')[:1]))

这将创建一个子查询以获取具有给定日期的最高价格值的对象,然后通过该子查询过滤主查询集。您可以在 Django docs 阅读有关子查询的更多信息.

关于mysql - Django ORM : group records by a field and then get the records with max field value in each group,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46211567/

相关文章:

mysql - SQL 连接 - 显示表,即使第二个连接表没有相关性

python - Django:具有不同字段的模型(实体-属性-值模型)

python - 如何在 Django 查询集中执行 OR 条件?

mysql - 在另一个查询中使用查询结果

mysql - 存储过程不起作用,我不知道为什么

mysql - 如何使用 SQL 聚合和求和相似选择的值?

django - 在 Django 中创建模型对象的最佳方法是什么?

python - 交易管理错误: This code isn't under transaction management when trying to test

python - Django .only() 导致最大递归深度超出错误?

python - 任意加入 Django 模型