簡體   English   中英

按每個組的最近日期獲取第一個元素

[英]Get First element by the recent date of each group

我在 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')

這給了我一組在每個組中都有最新業務的企業。 我如何省略其余的行? 我需要一些幫助

您可以使用 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() 子句,則需要顯式包含聚合列。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM