Подсчет суммы значений, основанный на уникальных значениях
Я не уверен, что заголовок достаточно ясен, поэтому я постараюсь объяснить, что я хочу и в чем проблема.
Что у меня есть
У меня есть график, который заполняется данными из запроса.
Каждый день месяца имеет значение, которое группируется по дням, например:
1 день = 5, 2 день = 6, 3 день = 8 и т.д.
Это работает со следующим кодом, для 1 подписки:
data_usage = DataUsage.objects \
.filter(subscription_id=subscription_id) \
.filter(created_at__month=today.month) \
.annotate(
created_date=TruncDay('created_at')
).values('created_date') \
.annotate(
subscription_id=Max('subscription_id'),
data_usage=Max('data_usage'),
created_at=Max('created_at')
).values(
'subscription_id',
'data_usage',
'created_at'
)
Ниже показан правильно заполненный график с помощью приведенного выше кода:

Что мне нужно
Мне нужен тот же график, но на этот раз со значениями от каждой подписки.
То есть, по сути, код должен дать мне тот же результат, но с суммой 'data_usage' всех подписок за этот день.
Должно использоваться только самое высокое и, следовательно, последнее значение для каждой подписки.
Я пробовал 10's решений, которые не работали для меня, текущий код не работает:
data_usage = DataUsage.objects \
.filter(created_at__month=today.month) \
.annotate(
created_date=TruncDay('created_at')
).values('created_date') \
.annotate(
subscription_id=Max('subscription_id'),
data_usage=Sum('data_usage'),
created_at=Max('created_at')
).values(
'data_usage',
'created_at'
)
Что не так с данными?
.
Всего должно быть около 800 ГБ.
Это намного больше этого значения, похоже, что он просто считает все...
Вкратце, что мне нужно
.
Мне нужна сумма data_usage, сгруппированная по дням и заполненная самым высоким/последним значением подписки.
Это должно дать мне правильное общее использование данных в день.
Модель использования данных согласно запросу:
class DataUsage(models.Model):
objects = DataUsageQuerySet.as_manager()
id = models.AutoField(primary_key=True)
subscription_id = models.ForeignKey('subscriptions.Subscription', db_column='subscription_id', blank=True, null=True, on_delete=models.CASCADE) # Becomes subscription_id
data_usage = models.FloatField(max_length=128, blank=True, null=True)
created_at = models.DateTimeField(auto_now_add=True, blank=True, null=True)
modified_at = models.DateTimeField(auto_now=True, blank=True, null=True)
