如果您使用的是PostgreSQL,通常的语法是:
select distinct on (name) name, valuefrom environments_serverpropertiewhere server = ...order by name, timestamp desc
从PostgreSQL文档中:
SELECT DISTINCT ON(expression [,…])仅保留给定表达式等于的每组行的第一行。使用与ORDER
BY相同的规则来解释DISTINCT ON表达式(请参见上文)。请注意,除非使用ORDER
BY来确保所需的行首先出现,否则每个集合的“第一行”都是不可预测的。
您可以在中查看并尝试 sql fiddle demo
。
可以从django文档中将此语法转换为django
:
仅在PostgreSQL上,您可以传递位置参数(* fields)来指定DISTINCT应该应用的字段名称。这将转换为SELECT DISTINCT
ON SQL查询。
因此在django中,它将类似于:
ServerPropertie.objects.filter(...).order_by('name', '-timestamp').distinct('name')
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)