如何按唯一SocialMedia_ID和最大DateTime筛选行?Django实现求助
你之前用distinct('SocialMedia_id')报错,是因为这个写法是PostgreSQL专属的DISTINCT ON语法,你的数据库后端(比如MySQL、SQLite)不支持,得换一种方式实现。
对应你给出的可运行SQL,用Django ORM可以这样写:
首先导入需要的模块:
from django.db.models import Subquery, Max
然后构建查询语句:
# 子查询:按SocialMedia_id分组,获取每组的最大DateTime值 latest_dates = StatsTwitter.objects.values('SocialMedia_id').annotate( max_datetime=Max('DateTime') ).values('max_datetime') # 主查询:筛选DateTime在子查询结果中的记录 accountsTwitter = StatsTwitter.objects.filter(DateTime__in=Subquery(latest_dates))
或者可以把代码合并成一行:
accountsTwitter = StatsTwitter.objects.filter( DateTime__in=Subquery( StatsTwitter.objects.values('SocialMedia_id').annotate(latest=Max('DateTime')).values('latest') ) )
这个写法和你提供的SQL逻辑完全一致:先通过子查询得到每个SocialMedia_id对应的最新DateTime,再筛选出所有匹配这些时间的记录,从而获取每个社交账号的最新插入记录。
内容的提问来源于stack exchange,提问作者Paul Viorel
相关产品推荐
相关产品推荐

