【发布时间】:2018-02-01 07:59:04
【问题描述】:
我有以下查询,旨在计算 CSR 呼叫指标和每天的总数。我现在为每日报告运行它的方式是按扩展名分组,并将 now() 和 curdate() 值放在日期和时间列中。但是,我现在的任务是对其进行修改,以获取过去 30 天内每 15 个 CSR 的每日总计的一次性报告,因此请采取现在正在做的事情,但要收集过去 30 天的数据。
运行以下查询并从野心Log30Days 表中选择* 后,我有354 行,这对于给定周末和缺勤的天数而言是正确的。但是,总数是不正确的。对于下面的总和列,它返回 1 或 0,因此它基本上只显示每个 CSR 每天的一次调用,而不是总数。
这是查询:
Insert into test.ambitionLog30Days(Extension, ExtID, Total_Talk_Time_seconds,
Total_Talk_Time_minutes,Total_Outbound, Total_Inbound,
Missed_Calls, Total_Calls, Time_of_report,Date_of_report )
SELECT
c.extension
,RESPONSIBLEUSEREXTENSIONID
, sum(Duration)
, round(sum(Duration) / 60,2)
, sum(if(LEGTYPE1 = 1,1,0))
, sum(if(LEGTYPE1 = 2,1,0))
, sum(if(Answered = 1,0,1))
, sum(if(LEGTYPE1 = 1,1,0)) + sum(if(LEGTYPE1 = 2,1,0)) as total_calls
, b.ts
, b.ts
FROM cdrdb.session a
INNER JOIN cdrdb.callsummary b
ON a.NOTABLECALLID = b.NOTABLECALLID
INNER join cdrdb.mxuser c
ON a.RESPONSIBLEUSEREXTENSIONID = c.EXTENSIONID
WHERE b.ts BETWEEN curdate() - interval 30 day and curdate()
AND c.extension IN (7276,7314,7295,7306,7357,7200,7218,7247,7331,7255,7330,7000,7215,7240,7358,7312)
group by c.extension,b.ts
ON duplicate key update Total_Talk_Time_seconds =values(Total_Talk_Time_seconds),
Total_Talk_Time_minutes =values(Total_Talk_Time_minutes),
Total_Outbound = values(Total_Outbound),
Total_Inbound = values(Total_Inbound),
Missed_calls = values(Missed_calls),
Total_Calls = values(Total_Calls),
Time_of_report = values(Time_of_report);
会话表列:
RESPONSIBLEUSEREXTENSIONID bigint(20) YES
调用汇总表列:
NOTABLECALLID bigint(20) YES UNI
STARTTIME datetime YES MUL
ENDTIME datetime YES MUL
DURATION int(11) YES MUL
ANSWERED smallint(6) YES
ts timestamp NO MUL CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP
firstcallid bigint(20) YES
mxuser 表列:
EXTENSIONID bigint(20) NO PRI 0
USERID bigint(20) YES MUL
ISLAST smallint(6) YES
FIRSTNAME varchar(32) YES
LASTNAME varchar(32) YES
USERPROFILENAME varchar(32) YES MUL
EXTENSION varchar(8) NO
ts timestamp NO MUL CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP
PRESENCENOTE varchar(64) YES
当前查询的一些示例数据:
ID | Ext | extID | TTTS | TTTM | TI | TO | MC | TC | DOR | TOR
1 7200 35298 5 0.08 1 1 0 1 2017-08-03 2017-08-03 16:19:48
2 7215 35295 116 1.93 1 1 0 1 2017-08-03 2017-08-03 16:41:32
3 7218 35302 11 0.18 0 1 0 0 2017-08-03 2017-08-03 16:43:47
4 7240 35417 79 1.32 1 1 0 1 2017-08-21 2017-08-21 19:13:38
5 7247 35296 40 0.67 0 1 0 0 2017-08-03 2017-08-03 16:55:50
6 7255 34935 65 1.08 1 1 0 1 2017-08-21 2017-08-21 18:57:07
7 7276 35299 146 2.43 1 1 0 1 2017-08-21 2017-08-21 20:37:18
8 7295 35439 92 1.53 1 1 0 1 2017-08-21 2017-08-21 15:44:36
9 7306 35283 108 1.8 1 1 1 1 2017-08-03 2017-08-03 21:34:47
10 7312 35404 54 0.9 1 1 1 1 2017-08-09 2017-08-09 16:56:51
11 7314 35352 35 0.58 1 1 1 1 2017-08-03 2017-08-03 14:47:33
12 7330 35297 38 0.63 1 1 0 1 2017-08-03 2017-08-03 16:45:05
预期数据应该是相同的格式,但每个 CSR 每个日期不止一次调用。似乎 upsert 可能是个问题,但 group by 也可能是个问题。
现在,如果我只按 c.extension 对上述查询进行分组,我会得到 15 行(有 15 个 CSR)并且总数是正确的,但它们累计反映了所有 30 天,我需要一个每天都有总数的以 30 天为间隔。
【问题讨论】:
标签: mysql sql datetime aggregate-functions