我正在尝试将这个简单的 SQL 查询转换为 Django 可以处理的内容:
SELECT *
FROM location AS a
WHERE a.travel_distance = (
SELECT MAX(travel_distance)
FROM location AS b
WHERE b.person_id = a.person_id
)
ORDER BY a.travel_distance DESC
这基本上是获取所有行进位置并仅选择包含最大行进距离的行。
这是我到目前为止得到的:
travels = Location.objects.filter(pk__in=Location.objects.order_by().values('person_id').annotate(max_id=Max('id')).values('max_id')).order_by('travel_distance')[::-1]
虽然结果相互匹配。第二种方法返回结果需要更长的时间。
无论如何我可以重写这个查询,所以它变得更快?