采用这些模型:
class Rocket(Model):
...
class Flight(Model):
rocket = ForeignKey(Rocket)
start_time = DateTimeField(...)
如果我想获得每枚火箭最近一次飞行的开始时间,那很简单:
>>> Flight.objects.values('rocket').annotate(max_start_time=Max('start_time'))
<QuerySet [
{'rocket': 3, 'max_start_time': datetime.datetime(2019, 6, 13, 6, 58, 46, 299013, tzinfo=<UTC>)},
{'rocket': 4, 'max_start_time': datetime.datetime(2019, 6, 13, 6, 59, 12, 759964, tzinfo=<UTC>)},
...]>
但是,如果我想选择那些相同航类的 ID 而不是 max_start_time
怎么办?
换句话说,我想获取每枚火箭的最新 Flight 的 ID。
最佳答案
您使用的是什么数据库后端?如果您的数据库后端支持 DISTINCT ON
,这最容易通过以下方式实现:
Flight.objects.order_by("rocket", "-start_time").distinct("rocket").values("id", "rocket")
关于django - 获取聚合中最大记录的 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57825546/