我有一个查询报告Asterisk调用使用情况和队列统计信息。查询当前使用MySQL WHERE子句来连接表并过滤数据。将MySQL查询从WHERE更改为LEFT JOIN
这是查询如何看待目前:
SELECT
c.name as 'Agent',
e.extended_number AS 'Extension',
COUNT(ql.`time`) AS 'Total Inbound Calls',
(SELECT
COUNT(1)
FROM
call_history ch,
ast_queue_mstatus qm
WHERE
ch.start >= (DATE_SUB(DATE(NOW()),
INTERVAL 10050 MINUTE))
AND ch.start <= (DATE(NOW()))
AND ch.calltype = 'out'
AND ch.flow = 'out'
AND ch.extension_number = qm.membername
AND qm.membername = e.extended_number
GROUP BY qm.membername) AS 'Total Outbound Calls',
FORMAT(SUM(CAST(ql.arg2 AS UNSIGNED))/60, 2) AS 'Total Inbound Duration',
FORMAT(AVG(CAST(ql.arg2 AS UNSIGNED))/60, 2) AS 'Avg Inbound Duration',
FORMAT(AVG(CAST(ql.arg1 AS UNSIGNED))/60, 2) AS 'Avg Caller Hold Time'
FROM
ast_queue_log ql,
ast_queue_mstatus qs,
client c,
extension e
WHERE
ql.queuename = '1234'
AND ql.`time` >= (DATE_SUB(DATE(NOW()), INTERVAL 7 DAY))
AND ql.`time` <= (DATE(NOW()))
AND (ql.event = 'COMPLETEAGENT'
OR ql.event = 'COMPLETECALLER'
OR ql.event = 'COMPLETETRANSFER')
AND RIGHT(ql.agent, 8) = qs.membername
AND qs.membername = e.extended_number
AND e.client_id = c.id
GROUP BY ql.agent
ORDER BY c.name;
,我的问题是,我需要返回对于尚未收到任何呼入呼叫队列成员外呼结果。目前,如果ast_queue_log
中没有记录,则WHERE
子句将排除记录,这意味着它们不会被标量子查询拾取。
如何更改此查询,以便我从call_history
中获得所有通话记录,其中ast_queue_mstatus
中对应的记录?
对不起,如果这太复杂或没有足够的信息,我可以尝试简化,如果这没有意义!
我给了一个答案,但现在我看到答案的核心(将条件从左到右连接)已经在您的标题中。让我感到奇怪:如果你已经知道,你为什么问? – GolezTrol 2014-09-23 17:03:21
@GolezTrol谢谢你的回答,我问这个问题的原因是我明白左连接是答案,但无法理解语法和需要什么。你的回答非常有帮助,我希望今天下午实施:) – btongeorge 2014-09-26 11:25:32