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

基于MySQL后端,Django获取每个域名对应的最新健康状态对象

解决方案

要获取每个WLSDomainName对应的最新DomainOverallHealthStatus完整对象,可以用以下两种方法:

方法一:子查询+聚合

先通过子查询找到每个域名对应的最新创建时间,再过滤出匹配该时间的完整记录:

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

# 子查询:获取每个domain_name对应的最新created时间
latest_created_subquery = DomainOverallHealthStatus.objects.filter(
    domain_name=OuterRef('domain_name')
).values('domain_name').annotate(latest=Max('created')).values('latest')

# 过滤出每个域名的最新健康状态记录
latest_health_records = DomainOverallHealthStatus.objects.filter(
    created=Subquery(latest_created_subquery)
)

方法二:Window函数(Django 2.0+)

通过窗口函数按域名分组,按创建时间倒序排序后取每组第一条:

from django.db.models import Window, F
from django.db.models.functions import RowNumber

# 定义窗口:按domain_name分组,created降序排序
window_clause = Window(
    partition_by=F('domain_name'),
    order_by=F('created').desc()
)

# 标注行号,过滤出每组第一行(最新记录)
latest_health_records = DomainOverallHealthStatus.objects.annotate(
    row_number=RowNumber().over(window_clause)
).filter(row_number=1)

说明

  • 两种方法都能返回包含DomainOverallHealthStatus所有字段的对象查询集
  • 确保BaseMixin中的created字段是DateTimeField类型,添加数据库索引可进一步提升查询效率

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 17:06:32