问题:
通过日志表记录的时间点,统计时间段的数据
准备:
- 工作记录日志表
sn 法律案件的序列号,每个时间点的负责用户。如[10, 11)点为u1负责,[11, 16)为u2负责, 16点之后为u3负责
wrk_record_log
sn | user_id | mark_time |
---|---|---|
sn001 | u1 | 2020-03-01 10:00:00 |
sn001 | u2 | 2020-03-01 12:00:00 |
sn001 | u3 | 2020-03-01 16:00:00 |
sn002 | u4 | 2020-03-01 11:00:00 |
sn002 | u5 | 2020-03-01 15:00:00 |
- 电话记录表
每个案件电话沟通的工作人员、时长、创建时间
tele_record
sn | user_id | duration | create_time |
---|---|---|---|
sn001 | u1 | 2 | 2020-03-01 10:20:00 |
sn001 | x1 | 5 | 2020-03-01 11:50:00 |
sn001 | u2 | 9 | 2020-03-01 14:50:00 |
sn001 | x2 | 1 | 2020-03-01 16:50:00 |
sn002 | x3 | 3 | 2020-03-01 15:10:00 |
sn002 | x4 | 4 | 2020-03-01 16:50:00 |
- 结果:需得出每个案件负责人的产能(非案件负责人的业绩、也统计为负责人的产能)
user_id | sn | duration |
---|---|---|
u1 | sn001 | 7 |
u2 | sn001 | 9 |
u3 | sn001 | 1 |
u4 | sn002 | 0 |
u3 | sn002 | 7 |
实现
- 两种方式: 可以通过窗口函数、分析函数实现、也可以通过sql关联实现,前者实现更加简单。
- 实现难点在于通过
工作记录日志表
判断每通电话的负责人。所以查出每个工作人员负责时间段,即可判断。
工作记录
sn | user_id | start_time | end_time |
---|---|---|---|
sn001 | u1 | 2020-03-01 10:00:00 | 2020-03-01 11:00:00 |
sn001 | u2 | 2020-03-01 11:00:00 | 2020-03-01 16:00:00 |
sn001 | u3 | 2020-03-01 16:00:00 | null |
sn002 | u4 | 2020-03-01 11:00:00 | 2020-03-01 15:00:00 |
sn002 | u5 | 2020-03-01 15:00:00 | null |
-
分析函数
-
直接关联。在某些特殊情况下,不能使用窗口函数。