Django добавляет дополнительное поле в предложение GROUP BY - PullRequest
0 голосов
/ 19 мая 2018

Вот запрос:

speed_by_computer = ChartPoint.objects.filter(
    date__gte=start,
    date__lt=end,
).values('computer_id') \
 .annotate(max_speed=Max('speed'))

Вот запрос SQL, созданный этим запросом:

SELECT "computer_id", MAX("speed") AS "max_speed" 
FROM "api_chartpoint" 
WHERE (
    "date" >= 2018-05-17 08:00:00+00:00 AND 
    "date" < 2018-05-17 09:00:00+00:00
) 
GROUP BY "computer_id", "date" 
ORDER BY "date" DESC

Обратите внимание, что в GROUP BY есть неожиданный dateпункт.Почему это здесь?Вот что я ожидал:

SELECT "computer_id", MAX("speed") AS "max_speed" 
FROM "api_chartpoint" 
WHERE (
    "date" >= 2018-05-17 08:00:00+00:00 AND
    "date" < 2018-05-17 09:00:00+00:00
) 
GROUP BY "computer_id"

1 Ответ

0 голосов
/ 19 мая 2018

Проблема была в порядке по умолчанию.Это было указано в Meta:

class ChartPoint(models.Model)
    ...
    class Meta:
       ordering = ['-date']

Удалите порядок и date не будет добавлено к GROUP BY:

speed_by_computer = ChartPoint.objects.filter(
    date__gte=start,
    date__lt=end,
).values('computer_id') \
 .annotate(hs_avg=Max('speed'))
 .order_by()
...