Django - получение уникальных строк по последней дате / столбцу - PullRequest
0 голосов
/ 28 апреля 2020

У меня есть следующая таблица:

class AccountData(models.Model):
    id = models.BigIntegerField(primary_key=True)
    date = models.DateField()
    last_update = models.DateTimeField()
    account = models.ForeignKey('Account', models.DO_NOTHING, db_column='account', related_name="values")
    value = models.DecimalField(max_digits=65535, decimal_places=65535, blank=True, null=True)

Учитывая набор запросов / список идентификаторов (неизвестное количество, сколько идентификаторов может быть Нет / 0)

Есть ли способ получить последняя строка для каждой учетной записи, а затем сложите значение?

Часть, с которой я действительно борюсь, - это получение только последней строки для каждой учетной записи.

Я знаю, что могу получить учетные записи, которые в данном наборе запросов, выполнив:

accounts = [1, 4, 65]
AccountData.objects.filter(account__in=accounts)

Просто нужно выяснить, как я могу получить только те строки, где «дата» максимально приближена к «сейчас». Таким образом, получая уникальные строки (только 1 строка на аккаунт)

1 Ответ

1 голос
/ 04 мая 2020

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

AccountData.objects.order_by('-date').distinct('account_number')

, чтобы далее суммировать совокупное значение использования

from django.db.models import Sum  
AccountData.objects.order_by('-date').distinct('account_number').aggregate(sum=Sum('value'))['sum'] or 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...