我正在尝试创建执行以下操作的查询:
- 仅列出最近 4 个月的结果 - 检查
- 删除最佳时间为 0 的结果 - 检查
- 列出独特的俱乐部和球队 - 检查
- 从集合中获取最佳时间 - 检查
- 整理俱乐部和球队 - 检查
我现在唯一需要的条件是:
- 如果俱乐部或团队列出超过 3 次(在获得最佳时间之前),则只取最近的 3 次结果。
-
place = Placing.objects \
.filter(event_date__gte=start_date) \
.filter(best_time__gt=0) \
.values_list('club_name','team_name') \
.annotate(Min('best_time')) \
.order_by('club_name','team_name')
请您参考如下方法:
您将不得不LIMIT您的查询(通过 Python 切片),这意味着您还必须分别查询每个团队,因为我不认为 LIMIT 子句可以多次表达 - 从好的方面来说,您将能够 aggregate(Min('best_time'))!
如果您需要一个包含Placing 对象的QuerySet,您可以构建一个使用| 运算符连接结果的查询集。
另外,Club 和 Team 有什么区别?
编辑:可能是这样的
from django.db.models import Min
besties = {}
for team in teams:
besties[team] = Placing.objects \
.filter(event_date__gte=start_date, best_time__gt=0).order_by(-event_date) \
.filter(team_name=team)[:3].aggregate(Min('best_time'))['best_time__min']
