Как генерировать ежедневные / еженедельные / ежемесячные / годовые совокупные значения из базы данных - PullRequest
2 голосов
/ 20 февраля 2020

Я работаю над API с Django Rest Framework. Я хочу генерировать ежедневные / еженедельные / ежемесячные / годовые агрегированные значения для общего количества заказов , которые произошли

Я добавил изображение, чтобы дать представление о том, как могут выглядеть агрегированные еженедельные данные . Вот упрощенная модель. Большинство запросов, которые я пытался выполнить, не смогли достичь того, что я хотел.

class Booking(models.Model):
    trans_date = models.DateTime(auto_now_add=True)
    amount_paid = models.DecimalField(decimal_places=2, max_digits=20)
    trans_date = models.DateField(auto_now=True)

Вот запрос, который я пытался выполнить;

weekly_agg = Booking.objects.annotate(week=ExtractWeek('trans_date')).values('trans_date').annotate(count=Count('id')).values('trans_date','count')

enter image description here

Ответы [ 2 ]

1 голос
/ 20 февраля 2020

Вот решение, вы можете заменить переменные для ежедневных, еженедельных и т. Д. c отсчетов:

from django.db.models.functions import ExtractDay,ExtractWeek,..Month,..Year
from django.db.models import Count

weekly_aggregate = Booking.objects.annotate(week=ExtractWeek('trans_date')).values('week').annotate(count=Count('id')).values('week'
,'count')

#output
<QuerySet [{'week': 3, 'count': 2}, {'week': 7, 'count': 7}, {'week': 20, 'count': 1}, {'week': 19, 'count': 1}, {'week': 1, 'count': 1}]>
1 голос
/ 20 февраля 2020

Может быть, это поможет вам объединить данные: https://hakibenita.com/django-group-by-sql

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...