获取聚合中Max记录的ID

Posted

技术标签:

【中文标题】获取聚合中Max记录的ID【英文标题】:Getting the ID of the Max record in an aggregate 【发布时间】:2020-01-09 12:58:12 【问题描述】:

采用这些模型:

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 怎么办?

换句话说,我想获取每个火箭的最新航班的 ID。

【问题讨论】:

如果我在这里遗漏了一些东西,我很抱歉,但是当你说“那些相同航班的 ID”时,在你给出的例子中你的意思是“3”和“4”对吗? @xplo4d 这些将是火箭队的 ID。我对示例中具有 max_start_time 值的航班 ID 感兴趣。 当然,不用做额外的查询。不保证 start_time 值是唯一的。 【参考方案1】:

您使用的是什么数据库后端?如果您的数据库后端支持DISTINCT ON,这很容易通过以下方式完成:

Flight.objects.order_by("rocket", "-start_time").distinct("rocket").values("id", "rocket")

【讨论】:

以上是关于获取聚合中Max记录的ID的主要内容,如果未能解决你的问题,请参考以下文章

如何使用聚合函数在 MySQL 查询中获取分组记录的第一条和最后一条记录?

如何使用聚合函数在 MySQL 查询中获取分组记录的第一条和最后一条记录?

聚合查询

聚合查询

Mongoose聚合从另一个集合中获取多条记录中的喜欢总和

MySQL 聚合函数运算符操作约束