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

Django+SQLite中筛选各prodID对应最新ProdDate的唯一数据

解决Django+SQLite下按prodID筛选最新ProdDate记录的问题

问题分析

你需要从TestPROD模型中提取每个prodID对应**最新ProdDate**的完整记录,但之前的两种方案都未满足需求:

  • 方案1的annotate用法错误,distinct()在SQLite中需配合特定排序字段,无法实现按prodID去重并保留最新记录;
  • 方案2仅提取了prodID列表,缺少其他关联字段数据。

解决方案

由于SQLite不支持PostgreSQL的DISTINCT ON语法,我们可以通过子查询+关联过滤的方式实现需求:

完整views.py代码

from django.db.models import Subquery, OuterRef

def welltests(request):
    # 子查询:获取每个prodID对应的最新ProdDate
    latest_prod_dates = TestPROD.objects.filter(
        prodID=OuterRef('prodID')
    ).order_by('-ProdDate').values('ProdDate')[:1]
    
    # 筛选出每个prodID对应最新ProdDate的完整记录
    testprodms = TestPROD.objects.filter(
        ProdDate=Subquery(latest_prod_dates)
    ).order_by('prodID')
    
    return render(request, 'Home/AllProd.html', {'testprodms': testprodms})

代码说明

  1. 子查询部分:针对当前主查询的prodID,筛选出该prodID下所有记录并按ProdDate倒序排列,取第一条的ProdDate(即最新日期);
  2. 主查询部分:过滤出ProdDate等于对应子查询结果的记录,这样就能得到每个prodID的最新完整数据。

额外注意

如果同一prodID存在多条ProdDate完全相同的最新记录,上述代码会返回所有这些记录。若需仅保留其中一条,可在子查询的order_by中添加额外排序字段(如-post_date),确保只取唯一一条:

latest_prod_dates = TestPROD.objects.filter(
    prodID=OuterRef('prodID')
).order_by('-ProdDate', '-post_date').values('ProdDate')[:1]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 19:15:28