需求背景:

录音系统内每天会产生许多投诉录音,这些录音需要分配给专门的人员负责跟听处理,每天录音明细中每个客户通话次数可能是多次,每通电话通话时长不定。

需求内容:

  1. 每天把前一天的全部通话录音分给3个人;
  2. 同一个客户的录音必须分配给同一个人;
  3. 每个人分到的总录音时长相等(大致均分即可);

解决方案:

根据需求内容将跟听人员姓名更新到 tel_number_record 表的  electro  字段内

 

 

tel_number_record 表:

call_log 表:

 

 

 

UPDATE tel_number_record a,  -- 当天客户清单表
(SELECT a1.tel_number,CASE
        WHEN (a1.number%6) = 0 THEN '张三' 
        WHEN (a1.number%6) = 1 THEN '李四' 
        WHEN (a1.number%6) = 2 THEN '王五'   
        WHEN (a1.number%6) = 3 THEN '王五'
        WHEN (a1.number%6) = 4 THEN '李四'
        ELSE '张三'  -- 均分需要S形分配
    END as electro from ( 
                SELECT
                    a.tel_number, a.sum_call_duration,
                    @i := @i + 1 AS number 
                FROM
                    (SELECT
                            tel_number, sum(call_duration) sum_call_duration
                        FROM
                            `call_log` -- 录音明细表
                        WHERE 
                            creat_date > '2222-02-02' and creat_date < '2222-02-03'
                        GROUP BY
                            tel_number 
                        ORDER BY sum(call_duration) desc -- 通话时长倒序

                    ) a,
                    -- 顺带附加随机分配逻辑(随机数*分配人数)
                (SELECT @i := FLOOR((RAND() * 2))) b
            ) a1 
) b set a.electro = b.electro WHERE a.tel_number = b.tel_number;

 

posted on 2022-07-15 13:36  界外  阅读(116)  评论(0)    收藏  举报