Django Filter on Distinct with orderby created at



如何使用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 ONORDER BY表达式,则需要使用Subquery

IncomingCallRecording.objects.filter(
pk__in=Subquery(
IncomingCallRecording.objects.distinct('lead_id').values('pk')
)
).order_by('-created_at')

最新更新