我有这张桌子:
id supply event_date value_average
----------------------------------------
1 a 01-01-2018 5
2 b 02-01-2018 6
3 a 02-01-2018 7
4 b 03-01-2018 8
5 c 03-01-2018 9
我试图基于event_date列获取每个耗材的最新值。我可以获得最新的事件,但是我也没有找到返回value_average的方法。
values_average = Purchase.objects \
.values('supply') \
.annotate(last=Max('event_date')) \
.order_by()
当前收益:
a 02-01-2018
b 03-01-2018
c 03-01-2018
预期收益:
a 02-01-2018 7
b 03-01-2018 8
c 03-01-2018 9
答案 0 :(得分:1)
我通过遵循以下答案找到了一种方法:
Django: select values with max timestamps or join to the same table
values_average = Purchase.objects \
.filter(farm=farm, supply__in=queryset) \
.order_by('supply', '-event_date') \
.distinct('supply')
仅适用于Postgres。最终结果将是带有最新事件的普通查询集。请注意模型是否具有元排序。
Django文档: https://docs.djangoproject.com/en/dev/ref/models/querysets/#django.db.models.query.QuerySet.distinct
答案 1 :(得分:0)
我认为您只需要将value_average属性添加到要返回的值即可:
values_average= Purchase.objects.values('supply','value_average').annotate(last=Max('event_date'))