用NOT IN等解释SQL查询
我有一个SQL查询:用NOT IN等解释SQL查询,sql,Sql,我有一个SQL查询: SELECT COUNT(DISTINCT callid) as r FROM voipwallboard_ast_queue_log WHERE queuename = :queuename AND time > :date AND callid NOT IN ( SELECT callid FROM voipwallboard_ast_queue_log
SELECT COUNT(DISTINCT callid) as r
FROM voipwallboard_ast_queue_log
WHERE queuename = :queuename
AND time > :date
AND callid NOT IN (
SELECT callid FROM voipwallboard_ast_queue_log
WHERE event IN ('CONNECT', 'ABANDON',
'AGENTCALLBACKLOGOFF', 'AGENTCALLBACKLOGIN'))
但我需要确切地知道它在做什么,有人能告诉我吗?它返回所有事件的唯一callid,这些事件由指定的队列名称和日期过滤,包括CONNECT、About、,AGENTCALLBACKLOGOFF和AGENTCALLBACKLOGIN似乎您正在计算一次呼叫的呼叫数(通常是独占的),但它可以有许多来自voipwallboard\u ast\u queue\u日志的不同事件,但您不计算事件为“连接、放弃、AGENTCALLBACKLOGOFF、AGENTCALLBACKLOGIN”的呼叫数
您可以指定日期和队列名称。它计算从:DATE开始的:queuename的不同调用,不包括在任何时间点或任何queuename发生“CONNECT”、“放弃”、“AGENTCALLBACKLOGOFF”、“AGENTCALLBACKLOGIN”事件的任何调用。子查询: 从voipwallboard\u ast\u queue\u log表中选择CallID列表,其中事件为“CONNECT”、“放弃”、“AGENTCALLBACKLOGOFF”、“AGENTCALLBACKLOGIN”中的任意一个 主要查询:
选择callid不在子查询结果和其他条件中的callid的不同计数。因此称为子查询的内部查询将首先运行,并返回单列callid表,您可以对其运行更多查询 WHERE event IN子句仅仅意味着仅选择事件属性为“CONNECT”、“READW”、“AGENTCALLBACLOGOFF”、“AGENTCALLBACLOGIN”之一的行 一旦该查询返回单列表,外部查询将返回返回的行数,其中queuename是您指定的queuename,大于您指定的日期,callid不会显示在上一个查询中 您还使用DISTINCT关键字,因此重复的行将从计数中排除
SELECT callid FROM voipwallboard_ast_queue_log
WHERE event IN ('CONNECT', 'ABANDON', 'AGENTCALLBACKLOGOFF', 'AGENTCALLBACKLOGIN')
SELECT COUNT(DISTINCT callid) as r
FROM voipwallboard_ast_queue_log
WHERE queuename = :queuename
AND time > :date
AND callid NOT IN (Sub query)