Django ORM GROUP BY

时间:2009-08-06 11:44:14

标签: django orm

这个PostgreSQL查询解决了我的问题,但我不知道如何将它放在Django ORM中。

SELECT DISTINCT ON (to_email) * FROM (SELECT * FROM invitation_invitation ORDER BY date_invited DESC) AS sub

从项目列表中,我想要“to_email”列的所有不同行,并且to_email重复的位置,应该选择最新的(date_invited)

2 个答案:

答案 0 :(得分:3)

以下是overview on doing aggregation in Django ORM,特别是values功能。

更新: 把它付诸行动,类似于

Invitation.objects.values('to_email').annotate(date_invited=Max('date_invited'))

应该适用于你的例子。

更新2: Ferran是对的,它只会检索to_email字段和date_invited注释。如果其他信息是必要的,那么在Python中进行“仅限最新”的过滤可能是最简单的。建议的解决方案更适合于您最初显示仅包含摘要数据的列表并根据请求提供更多详细信息的情况(假设摘要数据足以唯一标识记录)。

答案 1 :(得分:1)

我认为只有一个查询,你不能用django ORM做到这一点。 ORM不会制作这种子查询。 您可以使用连接对象并自己编写SQL或创建子查询并使用python代码获取DISTINCT步骤。

修改

Hank Gay提出的解决方案还可以,但只获取 date_invited to_email 字段,问题是获取最新记录的所有字段。