给定日期,如何求和该日期所属的一周的总和以及前10个星期的总和?
最近30天的每一天都可以通过以下方式实现:
FREQ=DAILY; BYDAY=MON,TUE,WED,THU,FRI; BYHOUR=9,10,11,12,13,14,15,16,17;BYMINUTE= 30;
我想也可以通过遍历import datetime as dt
from django.db.models import Sum
last_30 = dt.date.today() - dt.timedelta(days=30)
order_data = Order.objects.filter(
date__gt=last_30).extra(
select={'day': 'date(date)'}.values('day').annotate(
total=Sum('total')
)
print(order_data)
<OrderQuerySet [{'day': datetime.date(2018, 8, 28), 'total': Decimal('50000.00'),
{'day': datetime.date(2018, 8, 29), 'total': Decimal('84000.00'),
'...(remaining elements truncated)...']>
将它们归类为事实之后的几周,但是我想知道是否还有另一种方法。
使用postgresql会有所不同。
答案 0 :(得分:1)
您可以使用Django的ExtractWeek
[Django-doc]获取日期的星期数。因此,我们可以先注释查询集,然后传递正确的值,例如:
from django.db.models.functions import ExtractWeek
qs = Order.objects.filter(date__gt=last_70).annotate(
week=ExtractWeek('date')
).values('week').annotate(
week_total=Sum('total')
).order_by('week')
这将产生类似的内容:
<QuerySet [
{ 'week': 14, 'week_total': 1425.0 }
{ 'week': 15, 'week_total': 1302.0 }
{ 'week': 17, 'week_total': 1993.0 }
]>
请注意
.order_by
很重要,因为否则这些值将不“折叠”;