我有以下SQL查询返回我需要的内容:
SELECT sensors_sensorreading.*, MAX(sensors_sensorreading.timestamp) AS "last"
FROM sensors_sensorreading
GROUP BY sensors_sensorreading.chipid
用文字表示:获取每个唯一芯片组的最后一个传感器读数条目。
但我似乎无法找出正确的Django ORM语句来生成此查询。我能想到的最好的是:
SensorReading.objects.values(' CHIPID&#39)。注释(最后=最大('时间戳'))
但是如果我检查它生成的原始sql:
>>> print connection.queries [-1:]
[{u' time':你' 0.475',你' sql':你' SELECT " sensors_sensorreading"" CHIPID&#34 ;, MAX(" sensors_sensorreading"。" timestamp")AS" last"从 " sensors_sensorreading" GROUP BY" sensors_sensorreading"。" chipid"'}]
正如你所看到的,它几乎生成了正确的SQL,除了django只选择chipid字段和聚合" last" (但我需要返回所有返回的表字段)。
知道如何归还所有字段吗?
答案 0 :(得分:1)
假设除了chipid和timestamp之外你还有其他字段,那么我猜这是你真正需要的SQL:
select * from (
SELECT *, row_number() over (partition by chipid order by timestamp desc) as RN
FROM sensors_sensorreading
) X where RN = 1
这将返回每个芯片组的最新行以及该行中的所有数据。