如何使查询返回按天分组的行数?

时间:2012-10-17 14:03:39

标签: mysql

我正在使用这个表达式:

SELECT DATE(calldate) as Data,COUNT(clid) as Registros,dst as Tronco
FROM cdr WHERE dst=55008133070000 
AND calldate BETWEEN '2012-10-01' AND '2012-10-15'
GROUP BY DATE(calldate), clid HAVING COUNT(clid) > 1 ORDER BY Data DESC

Date---------Total------ Trunk
2012-10-11  3   55008133070000
2012-10-11  2   55008133070000
2012-10-11  3   55008133070000
2012-10-10  2   55008133070000
2012-10-10  2   55008133070000
2012-10-10  2   55008133070000
2012-10-09  3   55008133070000
2012-10-09  2   55008133070000
2012-10-09  2   55008133070000
2012-10-09  3   55008133070000
2012-10-09  5   55008133070000
2012-10-09  5   55008133070000

但是,需要显示当天重复的次数。

Date---------Total------ Trunk
2012-10-11  3   55008133070000
2012-10-10  3   55008133070000
2012-10-09  6   55008133070000

有什么建议吗?

3 个答案:

答案 0 :(得分:2)

在您的查询中,您使用的是GROUP BY DATE(calldate), clid,每天COUNT()会为clid提供clid

GROUP BY子句中删除SELECT DATE(calldate) as Data, COUNT(*) as Registros, dst as Tronco FROM cdr WHERE dst=55008133070000 AND calldate BETWEEN '2012-10-01' AND '2012-10-15' GROUP BY DATE(calldate) HAVING COUNT(clid) > 1 ORDER BY Data DESC 以获取每个日期的计数。

您的最终查询类似于:

dst

但是,在此查询中,提取{{1}}可能没有意义,可以删除。

答案 1 :(得分:0)

已编辑到期OP评论:

您应按dst分组,而不是clid分组,也计入不同的目的地号码,请参阅GROUP BY子句和COUNT:

SELECT DATE(calldate) as Data,COUNT( distinct clid) as Registros, dst as Tronco
FROM cdr 
WHERE dst=55008133070000 
      AND calldate BETWEEN '2012-10-01' AND '2012-10-15'
GROUP BY DATE(calldate),  dst 
HAVING COUNT(distinct clid) > 1 ORDER BY Data DESC

答案 2 :(得分:0)

而不是Id,请使用Calldate。

SELECT DATE(calldate) as Data,COUNT(calldate) as Registros,dst as Tronco
FROM cdr WHERE dst=55008133070000 
AND calldate BETWEEN '2012-10-01' AND '2012-10-15'
GROUP BY DATE(calldate), dst HAVING COUNT(calldate) > 1 ORDER BY Data DESC