2011-10-20 66 views
1

我正在尝试做一个简单的查询来计算客户端被代理调用的次数。MySQl统计计数与组

Call_ID | Lead_id | Agent 
1  | 1  | madison 
2  | 1  | Kelly 
3  | 2  | madison 
4  | 1  | Sam 

我需要添加一个名为call_attempt另一列这将是唯一的每个代理,并导致

Call_ID | Lead_id | Agent | call attempt 
1  | 1  | madison | 1 
2  | 1  | Kelly | 2 
3  | 2  | madison | 1 
4  | 1  | Sam  | 3 
+0

这是否只需要进行一次填充到表中,或是否需要每一个表中的记录被修改的时间进行更新? – mellamokb

回答

0

与丑恶表演的查询,但在这里,你无论如何是:

select t1.call_id, t1.lead_id, t1.agent, 
     (select count(*) from THETABLE t2 
     where t2.lead_id=t1.lead_id 
      and t2.call_id <= t1.call_id) 
from THETABLE t1 

UPDATE:

具有增强性能的查询:

select t1.call_id, t1.lead_id, t1.agent, 
     count(t2.call_id) as cum_sum 
from THETABLE t1 
inner join THETABLE t2 
    on t2.lead_id=t1.lead_id 
    and t2.call_id <= t1.call_id 
group by t1.call_id 
+0

(更新......) – MarianP

+0

这是赢家! – Val

0

对于你的问题上半年:

SELECT Lead_id, Agent, COUNT(*) AS NumberOfCalls 
    FROM YourTable 
    GROUP BY Lead_id, Agent 

对于下半年,我不确定你在问什么。

+0

这听起来像OP希望'call attempt'列是'Lead_id'上的一个排序/排序,它需要计算并更新回表中。 – mellamokb

+0

匿名downvoter会照顾解释他们的反对意见吗? –

+1

@mellamokb如果这是OP所要做的,我会阻止他们尝试将这种数据直接存储在表中。为了保持更新,它变得非常头疼。 –

1

你可以指望的呼叫数量通过之前在表中出现的lead_id来计算排名,并用查询更新到新的call_attempt字段中像下面这样:

update calls c 
    set call_attempt = 
     (select count(Lead_id) from calls c2 
     where c.Lead_id = c2.Lead_id and c2.Call_ID <= c.Call_ID); 

这里是一个demontsration:http://sqlize.com/fXn4p2cc5j