Агрегирование и дополнительные значения с Django

У меня есть модель, которая похожа на это:

class MyModel(models.Model)
    value = models.DecimalField()
    date = models.DatetimeField()

Я делаю этот запрос:

MyModel.objects.aggregate(Min("value"))

и я получаю ожидаемый результат:

{"mymodel__min": the_actual_minimum_value}

Однако я не могу выяснить способ получить одновременно минимальное значение И связанную дату (дата, в которую минимальное значение произошло).

Django ORM позволяет это, или я должен использовать необработанный SQL?

1
задан Jeremy 5 July 2010 в 20:17
поделиться

1 ответ

Что вы хотите сделать, так это аннотировать запрос, чтобы вы получили свои обычные результаты, но также имели некоторые данные добавлен к результату. Итак:

MyModel.objects.annotate(Min("value"))

Вернет нормальный результат с mymodel__min в качестве дополнительного значения

В ответ на ваш комментарий, я думаю, это то, что вы ищете? Это вернет даты с соответствующими значениями Min.

MyModel.objects.values('date').annotate(Min("value"))

Редактировать: В дальнейшем ответе на ваш комментарий, в котором вы хотите получить запись с наименьшим значением, но также хотите, чтобы в вашем результате было дополнительное поле даты, вы можете сделать что-то вроде этого:

MyModel.objects.values('date').annotate(min_value=Min('value')).order_by('min_value')[0] 

Это даст результат, который вы просите упорядочив результаты, а затем просто взяв первый индекс, который всегда будет наименьшим значением. См. подробнее

2
ответ дан 2 September 2019 в 23:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: