【发布时间】:2014-08-27 21:52:01
【问题描述】:
我有一个包含以下列的表格:
class Table1(models.Model):
avg_value=models.CharField('Avg Value',)
sys_timestamp = models.IntegerField('SYS Timestamp')
现在我想做这个 mysql 查询:
select max(id), avg_value, sys_timestamp from Table1 group by sys_timestamp order by id desc limit 10;
我只想要结果中的 max_id 和 avg_value 和 sys_timestamp
如果可能,仅使用 sys_timestamp 和 avg_value 示例[[1404385800L,-34],[1404385500L,-45].............]
使用 Django ORM 将 group_by 设置为仅 sys_timestamp。
我尝试了以下方法,但未能获得预期的结果。
Table1.objects.values_list('sys_timestamp','avg_value').annotate(max_id=Max('id')).order_by('-id')[:10]
与
如果我这样做:
print (Table1.objects.values_list('sys_timestamp','avg_value').annotate(max_id=Max('id')).order_by('-id')[:10]).query
SELECT Table1.sys_timestamp, Table1.avg_value, MAX(Table1.id) AS max_id FROM Table1 GROUP BY Table1.sys_timestamp, Table1.avg_value ORDER BY Table1.id DESC LIMIT 10
order_by 是sys_timestamp 和avg_value,这不是必需的。
如果我这样做:
(PerformanceService.objects.only('avg_value','sys_timestamp').values('sys_timestamp').annotate(max_id=Max('id')).order_by('-id')[:6]).query
SELECT Table1.sys_timestamp, MAX(Table1.id) AS max_id FROM Table1 GROUP BY Table1.sys_timestamp ORDER BY Table1.id DESC LIMIT 6
这个回报:
[{'sys_timestamp': 1404385800L, 'max_id': 7380}, {'sys_timestamp': 1404385500L, 'max_id': 7370}, {'sys_timestamp': 1404385200L, 'max_id': 7360}.............]
但要求是
[{'sys_timestamp': 1404385800L, 'max_id': 7380, avg_value:-34}, {'sys_timestamp': 1404385500L, 'max_id': 7370, avg_value:-39}, {'sys_timestamp': 1404385200L, 'max_id': 7360, avg_value:-23}.............]
任何想法。 ?
【问题讨论】:
标签: mysql django python-2.7 django-orm