django如何生成这个SQL?

时间:2016-01-01 23:38:23

标签: python sql-server django

我有以下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" (但我需要返回所有返回的表字段)。

知道如何归还所有字段吗?

1 个答案:

答案 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

这将返回每个芯片组的最新行以及该行中的所有数据。