Django - 计算created_at和done_at之间的平均时间

问题描述 投票:1回答:3

假设我在db中有100个对象,每个对象都有created_atdone_at时间。我想计算所有对象的平均持续时间。有这样的想法:首先计算所有对象的持续时间,然后得到平均值。但还有其他有用的好方法吗?

python django
3个回答
2
投票

您可以使用aggregate()F expressions

from django.db.models import Avg, F

Model.objects.aggregate(average_delta=Avg(F('done_at') - F('created_at')))

1
投票

除了this answer,你也可以尝试一下

from django.db.models import Avg, F

Model.objects.annotate(diff=F('done_at') - F('created_at')).aggregate(duration=Avg('diff'))

0
投票

使用杰特和杰林彼得乔治的回答几乎没有变化,它完美无缺:

from django.db.models import Avg, F, Sum, DurationField

IssueDone.objects.annotate(time_elapsed=Sum(Cast(F('done_date')-F('created_date'), DurationField()))).aggregate(Avg('time_elapsed'))
© www.soinside.com 2019 - 2024. All rights reserved.