我正在创建一个Django应用程序,其中我有一个包含'items'的表,它们创建的日期以及它们拥有的点数。我想编写一个查询,返回过去4天中得分最多的项目,然后是之前4天内得分最多的项目,依此类推。我想知道如何做到这一点(我对SQL很新,如果这是一个基本问题,我很抱歉)。我想我可以在我的Django视图中迭代获取每组4中的顶级记录,然后组合这些对象,但这需要我为每一组命中数据库,我猜这将是一个糟糕的方式正在做?任何指针都会非常感激!
谢谢!
答案 0 :(得分:5)
不幸的是,没有办法避免在这里为每个组点击数据库。这应该不是一个大问题,我假设你会限制团体的数量到理智的程度?如果您担心数据库负载,请确保索引“创建日期”和“点数”字段。
您的代码应该类似于:
from datetime import date, timedelta
from models import Item
groups = []
for i in range(0, 10):
items = Item.objects.filter(date_created=date.today() - timedelta(i))
groups.append(items.order_by('-points'))