You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django按外键分组查询order最大值对应的BookingComponent记录ID方法

Django ORM 分组取每组最大值并过滤的实现方案

首先导入所需的ORM函数:

from django.db.models import Max, Subquery, OuterRef

实现代码

# 构造子查询:按booking分组,查询每个booking对应的最大order值
max_order_subquery = BookingComponentModel.objects.filter(
    booking=OuterRef("booking")
).values("booking").annotate(
    max_order=Max("order")
).values("max_order")

# 外层查询:匹配过滤条件 + order等于对应分组的最大值
target_records = BookingComponentModel.objects.filter(
    component_type="Soak",
    status="In Progress",
    order=Subquery(max_order_subquery)
)

# 仅需要ID列表的话可以追加values_list
target_ids = target_records.values_list("id", flat=True)

逻辑说明

  • 子查询中通过OuterRef("booking")关联外层查询的booking字段,为每一个booking分组计算对应的最大order值
  • 外层查询先过滤符合component_type='Soak'、status='In Progress'的记录,再匹配其order值是否等于当前booking分组的最大order,最终返回符合所有要求的记录

按照你提供的示例数据表,执行上述查询会得到ID为3、5的记录,如果你预期得到的是ID4、6,可以检查是否过滤条件设置有误。

内容的提问来源于stack exchange,提问作者Lewis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 20:24:03