use*_*253 7 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             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')
这为我提供了一组企业,每个组的顶部都有最新的业务。如何省略其余行?我需要一些帮助
rlu*_*uts 11
如果您使用 PostgreSQL [docs],您可以使用order_by()和distinct()方法:
Model.objects.all().order_by('business_id', '-date').distinct('business_id')
尝试这个:
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()子句之前,则任何注释都将自动添加到结果集中。但是,如果在 annotate() 子句之后应用values() 子句,则需要显式包含聚合列。
| 归档时间: | 
 | 
| 查看次数: | 5043 次 | 
| 最近记录: |