因此,我有一个数据库来跟踪某些Wikipedia编辑。在某些需要的情况下,数据库可以将同一编辑多次保存到db中,其中一列具有不同的值。
我希望能够创建一个基于rc_id
列删除重复行的查询集,这与重复编辑相同。我不在乎哪些重复行会被丢弃,因为我只需要非唯一信息。
如果我使用的是PostgreSQL数据库,则可以通过queryset.objects.filter(field=filter).distinct('rc_id')
使用DISTINCT ON功能。但是,在MySQL中,此功能不可用。
关于此主题的其他SO问题已通过告诉人们使用.values_list('rc_id').distinct()
得到了解答,但是我希望结果仍然是用于进一步过滤的查询集,而不是值列表。如何在查询集级别执行此操作,或者在必要时如何使用原始SQL查询执行此操作?
答案 0 :(得分:0)
借助上面的HåkenLid,我的解决方案是:
ordered_queryset = queryset.order_by(
'-timestamp').values_list(
'domain', 'timestamp', 'username', 'page_title', 'edit_summary', 'rc_id', named=True
).distinct()
为澄清起见,对于重复的编辑,values_list中的每个值都是相同的,因此我省略了唯一的列。这样,这将返回具有正确过滤的行的查询集。