Django 2.X模型 - 以时间间隔获取聚合数据

时间:2018-06-16 23:18:51

标签: django python-3.x django-models django-2.0

我有以下任务: 获取按5分钟的时间间隔分组的属性的所有SUM。

我知道如何在(My)SQL中执行此操作,但不能使用Django模型ORM系统。

以下MySQL查询工作正常:

SELECT DATE_FORMAT(
    MIN(createdAt),
    '%d/%m/%Y %H:%i:00'
  ) as adjusted_date,SUM(number_of_items), COUNT(id) FROM app_model GROUP BY ROUND(UNIX_TIMESTAMP(app_model.createdAt) DIV 300);

到目前为止,我有以下Django代码:

MyModel.objects.filter(my_attribute=my_value).order_by(
        "mymodel.createdAt").extra({'minute': 'minute(mymodel.createdAt)'}).values("minute").annotate(
        TotalAmount=models.Sum("number_of_items"))

SQL返回以下结果: enter image description here

Django结果的问题在于,每分钟都在进行。这意味着,如果在同一分钟内有5行,它将返回该行的5倍。此外,没有“真正的5分钟”间隔。

我正在使用MySQL,Python 3.6.5和Django 2.0.6

例如,这是模型:

class BaseModel(models.Model):
    uuid = models.UUIDField(unique=True, default=uuid.uuid4, editable=False, verbose_name='UUID')
    number_of_items = models.DecimalField(default=0, decimal_places=10, max_digits=16)
    createdAt = models.DateTimeField(auto_now_add=True, auto_now=False, editable=False, verbose_name=_('created'))
    updatedAt = models.DateTimeField(auto_now=True, editable=False, verbose_name=_('updated'))

0 个答案:

没有答案