我有这样一个模型:
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 支持的 OuterRef
和 Subquery
来实现
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/