如何使用distinct和order进行筛选
IncomingCallRecording.objects.filter().order_by("lead_id","-created_at").distinct("lead_id")
问题:在
上创建的Order by不工作是否有其他解决方案可以帮助
可以在order_by
中使用created_at
IncomingCallRecording.objects.order_by("-created_at").distinct("lead_id")
按顺序进行多列排序。如果您在order_by
中定义两列,则按第一列和第二列排序(首先按lead_id
排序,然后在每个lead_id
中按created_at
排序)。
解决方案将受到数据库。对于MYSQL,DISTINCT ON
是不允许的。对于POSTGRES,DISTINCT ON
表达式必须匹配ORDER BY
。
在POSTGRES
的情况下,如果您想使用不同的DISTINCT ON
和ORDER BY
表达式,则需要使用Subquery
。
IncomingCallRecording.objects.filter(
pk__in=Subquery(
IncomingCallRecording.objects.distinct('lead_id').values('pk')
)
).order_by('-created_at')