【发布时间】:2020-02-20 15:12:49
【问题描述】:
我正在尝试绘制一个日系列图,它将显示一天系列中部门的员工人数。这里的问题是我想找到一种方法来限制员工最多的部门,这样我就不需要画太多线并给数据库带来压力。 (例如限制在员工出勤率最高的前 3 个部门)
我正在使用: Django 1.11.x Postgres 9.4
我们的目标是创建这种类型的日系列图表。有部门分组和员工人数。
我已经设法通过以下代码实现它:
from datetime import date, datetime
from django.db.models import Count
from django.db.models.functions import (
TruncDate, TruncDay, TruncHour, TruncMinute, TruncSecond,
)
emp_by_day = Attendance.objects.annotate(day=TruncDay('created_at')).values('day', 'division_id').annotate(cnt=Count('employee_id', distinct = True)).order_by('day')
for exp in emp_by_day:
print(exp['day'], exp['division_id'], exp['cnt'])
然而,它目前输出这样的显示(我通常很高兴但想限制它):
employee count<->
division_id<->
<---day----------------->
2019-10-22 00:00:00+00:00 15 6
2019-10-22 00:00:00+00:00 16 6
2019-10-22 00:00:00+00:00 18 5
2019-10-22 00:00:00+00:00 20 4
2019-10-22 00:00:00+00:00 21 12 <-- largest 3
2019-10-22 00:00:00+00:00 25 14 <-- largest 3
2019-10-22 00:00:00+00:00 28 12 <-- largest 3
2019-10-23 00:00:00+00:00 15 6
2019-10-23 00:00:00+00:00 16 5
2019-10-23 00:00:00+00:00 18 2
2019-10-23 00:00:00+00:00 20 3
2019-10-23 00:00:00+00:00 21 14 <-- largest 3
2019-10-23 00:00:00+00:00 25 17 <-- largest 3
2019-10-23 00:00:00+00:00 28 13 <-- largest 3
2019-10-24 00:00:00+00:00 15 2
2019-10-24 00:00:00+00:00 16 6
2019-10-24 00:00:00+00:00 18 5
2019-10-24 00:00:00+00:00 20 4
2019-10-24 00:00:00+00:00 21 13 <-- largest 3
2019-10-24 00:00:00+00:00 25 12 <-- largest 3
2019-10-24 00:00:00+00:00 28 10 <-- largest 3
我的目标是产生这个(限制在最大的 3 个部门):
2019-10-22 00:00:00+00:00 21 12 <-- largest 3
2019-10-22 00:00:00+00:00 25 14 <-- largest 3
2019-10-22 00:00:00+00:00 28 12 <-- largest 3
2019-10-23 00:00:00+00:00 21 14 <-- largest 3
2019-10-23 00:00:00+00:00 25 17 <-- largest 3
2019-10-23 00:00:00+00:00 28 13 <-- largest 3
2019-10-24 00:00:00+00:00 21 13 <-- largest 3
2019-10-24 00:00:00+00:00 25 12 <-- largest 3
2019-10-24 00:00:00+00:00 28 10 <-- largest 3
请告诉我如何才能产生这样的预期输出(将其限制为最大的 3 个部门)
【问题讨论】:
-
我可以用 SQL 提供解决方案吗?我在 ORM 方面不是很好。但是,我也会尝试在其中发布解决方案。
-
您想将其限制在当天员工出勤率最高的前 3 个部门,还是在报告时间或...的平均时间?
-
是当天员工出勤率最高的前 3 个部门,并将这 3 个部门用于时间序列。无论如何,如果还有其他人认为它很好,只要我可以在前 3 名的查询中限制它
标签: django postgresql time-series django-queryset limit