我在使用最新的sqlserver_ado库的SQL Server 2005数据库上使用Django 1.1.1。Django聚合查询生成SQL错误
models.py包括:
class Project(models.Model):
name = models.CharField(max_length=50)
class Thing(models.Model):
project = models.ForeignKey(Project)
reference = models.CharField(max_length=50)
class ThingMonth(models.Model):
thing = models.ForeignKey(Thing)
timestamp = models.DateTimeField()
ThingMonthValue = models.FloatField()
class Meta:
db_table = u'ThingMonthSummary'
在视图中,我已经检索了一个名为“东西”查询集包含25件事情:
things = Thing.objects.select_related().filter(project=1).order_by('reference')
然后我想要做的汇总查询到得到这些东西的前20个的平均ThingMonthValue在一段时间内,并且相同的值为最后5.
对于我的前20个:
averageThingMonthValue = ThingMonth.objects.filter(thing__in=things[:20],timestamp__range="2009-01-01 00:00","2010-03-00:00")).aggregate(Avg('ThingMonthValue'))['ThingMonthValue__avg']
这工作正常,并返回所需的值。
在过去的5我做的:
averageThingMonthValue = ThingMonth.objects.filter(thing__in=things[20:],timestamp__range="2009-01-01 00:00","2010-03-00:00")).aggregate(Avg('ThingMonthValue'))['ThingMonthValue__avg']
但为了这个,我得到一个SQL错误:“只有一个表达式可以在选择列表中指定时不引入子查询用EXISTS”
的SQL查询中使用Django的写着:
SELECT AVG([ThingMonthSummary].[ThingMonthValue]) AS [ThingMonthValue__avg]
FROM [ThingMonthSummary]
WHERE ([ThingMonthSummary].[thing_id] IN
(SELECT _row_num, [id] FROM (SELECT ROW_NUMBER() OVER (ORDER BY [AAAA].[id] ASC) as _row_num,
[AAAA].[id] FROM (SELECT U0.[id] FROM [Thing] U0 WHERE U0.[project_id] = 1) AS [AAAA]) as QQQ
where 20 < _row_num) AND [ThingMonthSummary].[timestamp] BETWEEN '01/01/09 00:00:00' and '03/01/10 00:00:00')
任何想法,为什么它的工作原理为物联网的一个切片,而不是第二个?我已经检查过,并且两个切片确实包含所需的东西。
这基本上是我做了什么,它是丑陋的,但工程。我已经用sqlserver_ado维护者提出了一张票据,希望他们能够解决这个问题。谢谢! – meepmeep 2010-04-23 14:07:01