在Django ORM中获取每个组的最新n条记录,可以使用以下步骤:
MyModel
的模型,其中包含一个名为group
的字段表示组,以及一个名为created_at
的字段表示记录创建时间。你想要获取每个组的最新3条记录,可以使用以下代码:n = 3
queryset = MyModel.objects.annotate(
row_number=Window(
expression=RowNumber(),
partition_by=['group'],
order_by=F('created_at').desc()
)
).filter(row_number__lte=n)这个查询使用annotate
函数添加了一个名为row_number
的字段,该字段表示每个组内记录的行号。然后,使用filter
函数过滤出行号小于等于n的记录,即每个组的最新n条记录。subquery
,它过滤出特定组的记录,并按照created_at
字段降序排序,然后只选择id字段,并限制结果数量为n。然后,在主查询中,使用id__in
条件过滤出id在子查询结果中的记录,即每个组的最新n条记录。以上是在Django ORM中获取每个组的最新n条记录的方法。根据具体的需求和数据模型,你可以选择适合的方法来实现。
领取专属 10元无门槛券
手把手带您无忧上云