我有以下返回所需内容的SQL查询:
SELECT sensors_sensorreading.*, MAX(sensors_sensorreading.timestamp) AS "last"
FROM sensors_sensorreading
GROUP BY sensors_sensorreading.chipid
换句话说:获取每个唯一芯片的最后一个传感器读数条目。你知道吗
但我似乎无法找出正确的Django ORM语句来生成这个查询。我能想到的最好办法是:
SensorReading.objects.values('chipid').annotate(last=Max('timestamp'))
但如果我检查它生成的原始sql:
>>> print connection.queries[-1:]
[{u'time': u'0.475', u'sql': u'SELECT "sensors_sensorreading"."chipid", MAX("sensors_sensorreading"."timestamp") AS "last" FROM "sensors_sensorreading" GROUP BY "sensors_sensorreading"."chipid"'}]
如您所见,它几乎生成正确的SQL,除了django只选择chipid字段和聚合“last”(但我需要返回所有表字段)。你知道吗
知道如何返回所有字段吗?你知道吗
假设表中除了chipid和timestamp之外还有其他字段,那么我猜这就是您实际需要的SQL:
这将返回每个芯片的最新行以及该行中的所有数据。你知道吗
相关问题 更多 >
编程相关推荐