查询中的MySQL查询

时间:2014-02-08 00:25:09

标签: mysql asterisk

我有以下查询,可以很好地查询所有错过的队列调用的星号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?

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。