2

我正在尝试将这个简单的 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]

虽然结果相互匹配。第二种方法返回结果需要更长的时间。

无论如何我可以重写这个查询,所以它变得更快?

4

2 回答 2

1

如果我理解正确,您想要每个人的最大行驶距离。假设有一个 Person 模型,也许从另一个方向问。就像是:

Person.objects.values('id').annotate(max_distance=Max('location__travel_distance'))

我没有对此进行测试,因为我手边没有等效的数据模式,但这对您有用吗?

于 2013-08-25T18:29:37.323 回答
0

这不行吗?就像是:

select max(id), sum(travel_distance) from table group by person_id;
于 2013-08-25T15:22:57.790 回答