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