Python 按每个组的最近日期获取第一个元素

Python 按每个组的最近日期获取第一个元素,python,sql,django,orm,Python,Sql,Django,Orm,我在django有以下型号 Business ID Business Name Business Revenue Date 以下是示例数据: Business ID | Business Name | Business Revenue | Date 1 B1 1000 2012-10-13 2 B2 20000 2013-10-16 1

我在django有以下型号

Business ID
Business Name
Business Revenue
Date
以下是示例数据:

Business ID | Business Name | Business Revenue | Date
1             B1              1000               2012-10-13
2             B2              20000              2013-10-16
1             B1              2000               2013-04-13
2             B2              24000              2014-09-02
我想把所有有最新日期的公司都拿来

这是我想要的输出:

Business ID | Business Name | Business Revenue | Date
1             B1              2000               2013-04-13
2             B2              24000              2014-09-02
我试过这个:

model.objects.filter(date__gte = date.today()).order_by('business_id', '-date')
这给了我一组业务,每个业务组中最新的业务位于顶部。如何省略其余的行?我需要一些帮助

试试这个:

from django.db.models import Q

group_dict = Model.objects.values('business_id').annotate(max_date=Max('date')).order_by()

params = Q()
for obj in group_dict:
    params |= (Q(business_id__exact=obj['business_id']) & Q(date=obj['max_date']))

qs = Model.objects.filter(params)
这可以帮助你

如果values()子句位于annotate()子句之前,则任何注释 将自动添加到结果集中。然而,如果 values()子句应用于annotate()子句之后,您需要 显式包含聚合列


您可以使用order_by和distinct()方法

Model.objects.all().order_by('business_id','-date').distinct('business_id'))

我已经尝试过这种方法,但我也希望其他列(如Business\u Name、RevenueIt)的值能够正常工作,但是,它需要为更大的数据集编制索引。谢谢,大桌子很慢