我有以下查询,可以很好地查询所有错过的队列调用的星号cdr,但它是重复的。也就是说,如果队列呼叫中有两个分机,那么它被归类为两个未接来电。
查询:
SELECT count( * ) as today_total_8
FROM cdr
WHERE channel LIKE '%from-queue%'
AND disposition='NO ANSWER'
AND DATE(`calldate`) = DATE(CURDATE())
列calldate
对于所有两个结果都是相同的值;如何将其添加到上述查询中以显示一个未接来电的计数?
SELECT上返回的数据没有计数:
calldate channel disposition
------------------------------------------------------------------------
2014-02-08 01:15:02 Local/201@from-queue-00000012;2 NO ANSWER
2014-02-08 01:15:02 Local/200@from-queue-00000013;2 NO ANSWER
2014-02-08 00:18:04 Local/201@from-queue-00000010;2 NO ANSWER
2014-02-08 00:18:04 Local/200@from-queue-00000011;2 NO ANSWER
我怎么能这样做,因为我希望我的数量是2?
答案 0 :(得分:0)
SELECT count(distinct calldate ) as today_total_8
FROM cdr
WHERE channel LIKE '%from-queue%'
AND disposition='NO ANSWER'
AND DATE(`calldate`) = DATE(CURDATE())
GROUP BY calldate
答案 1 :(得分:0)
将查询的SELECT列表更改为以下内容:
SELECT COUNT(DISTINCT SUBSTRING_INDEX(cdr.channel,'@',1) AS today_total_8
FROM ...
这样可以防止扩展名(“@”符号前面的通道部分)的“重复”值被多次计算。
这是使用SUBSTRING_INDEX函数只返回“扩展名”,例如'Local/201'
。
DISTINCT
聚合中的COUNT
关键字为“扩展”的每个唯一值的计数增加1。