django orm mysql 获取分组最新日期数据
时间: 2023-11-06 07:06:02 浏览: 102
基于mysql实现group by取各分组最新一条数据
5星 · 资源好评率100%
可以使用Django ORM的annotate和Subquery功能来实现该需求。
假设你有一个模型类叫做MyModel,其中包含日期字段date和分组字段group:
```python
class MyModel(models.Model):
date = models.DateField()
group = models.CharField(max_length=50)
value = models.FloatField()
```
现在你想要获取每个分组的最新日期和对应的值,可以使用以下代码:
```python
from django.db.models import Max, OuterRef, Subquery
# 获取每个分组的最新日期
latest_dates = MyModel.objects.values('group').annotate(latest_date=Max('date'))
# 获取每个分组最新日期对应的值
latest_values = MyModel.objects.filter(
date__in=Subquery(latest_dates.filter(group=OuterRef('group')).values('latest_date'))
).values('group', 'value')
```
首先,我们使用annotate函数获取每个分组的最新日期。然后,我们使用Subquery函数将这些最新日期作为子查询的条件来过滤原始查询结果,得到每个分组最新日期对应的值。注意,我们需要使用OuterRef来引用外层查询中的分组字段。最终,latest_values变量将包含每个分组最新日期对应的值。
阅读全文