我有下表:
2018-01-01 ------- 10
2018-01-15 ------- 20
2018-01-31 ------- 30
2018-02-01 ------- 10
2018-03-01 ------- 10
2018-03-20 ------- 20
我需要求和过滤的值
1-总和(值),其中日期<该月的第一天
2-总和(值),其中日期<月的最后一天
预期结果(类似):
[
{'year-month': '2018-01'}, {'sum_before_month_day_one': 0}, {'sum_before_last_month_day': 60},
{'year-month': '2018-02'}, {'sum_before_month_day_one': 60}, {'sum_before_last_month_day': 70},
{'year-month': '2018-03'}, {'sum_before_month_day_one': 70}, {'sum_before_last_month_day': 100},
]
我在文档https://docs.djangoproject.com/en/2.0/topics/db/aggregation/#filtering-on-annotations
上发现了这一点但是,我不知道通过自己的查询注释为Q提供args。
到目前为止,我设法对值求和并按月分组:
In [12]: result = Sale.objects \
...: .annotate(date=TruncMonth('event_date')) \
...: .values('date') \
...: .annotate(quantity=Sum('quantity')) \
...: .values('date', 'quantity') \
...: .order_by('date')
In [13]: for i in result: print(i)
{'date': datetime.date(2018, 1, 1), 'quantity': 60.0}
{'date': datetime.date(2018, 2, 1), 'quantity': 10.0}
{'date': datetime.date(2018, 3, 1), 'quantity': 30.0}