Django ORM:根据过滤器和顺序从更新集中获取最后一项

Django ORM:根据过滤器和顺序从更新集中获取最后一项,django,postgresql,orm,Django,Postgresql,Orm,我有一张桌子: `UPDATES` TABLE product_id | sales_rank | updated_on ____________________________________________ 1 500 2015-12-17 15:19 2 600 2015-12-17 15:20 3 700 2015-12-17 15:21 1

我有一张桌子:

`UPDATES` TABLE
product_id  |  sales_rank  |  updated_on
____________________________________________
1            500            2015-12-17 15:19
2            600            2015-12-17 15:20
3            700            2015-12-17 15:21
1            550            2015-12-18 15:19
2            550            2015-12-18 15:20
3            1000           2015-12-18 15:21
我还有另一张表:

`PRODUCTS` TABLE
product_id  |  title  |  brand  |  picture
__________________________________________
1            iPod      Apple     http://cdn...
2            iPad      Apple     http://cdn...
3            iPhone    Apple     http://cdn...
用户应该能够搜索特定的产品特征,并检索最新的更新。例如,如果我搜索标题“iPhone”,我应该会从
UPDATES
表中收到第6行。如果我搜索“Apple”品牌,我将从
更新
表中收到第4、5和6行

我一直在做的只是根据产品id分组,然后选择“max(updated_on)”以获得产品列表。但是,这里有一个问题,因为我也想按销售排名订购

我正在使用的数据库目前有200000个产品和超过300万个更新行。我需要返回最新的500个更新行(记住,也是按销售排名排序的),它们可以满足某些特性

我很迷路,可能是想得太多了,但如果能得到任何帮助,我将不胜感激


谢谢

按销售排名排序的订单有什么困难?为什么您不能执行
order\u by('sales\u rank')
?当我添加此项时,它会将'sales\u rank'添加到group by子句中,因此,如果销售排名在不同的更新中不同,它们将不会仅根据产品id进行分组。我希望这是有意义的。如果执行
updates.objects.values('product\u id')。注释(latest=Max('updated\u on'))。order\u by('-sales\u rank')[:500]
,将会发生什么?这将导致:
按“产品更新”分组。“产品id”,“产品更新”。“销售排名”按“产品更新”排序。“销售排名”描述限制500
,这将导致同一产品在销售排名发生变化时被多次退回。嗯,我不确定,但我有类似的东西,我试过了,它不是两种东西都分组的。您确定只将
产品标识
放在
语句中吗?如果只在数据库shell中执行原始查询,而不按
sales\u rank
分组,会怎么样?