我在REDSHIFT中有一张收集验证电话cdrs的表:
name | callid | timestamp | Anumber | BNumber | Duration | Status
customerA |1631c40d-e397 |2017/01/01 03:01:00| +390123456789 | +440123456700 | 0 | aborted
customerA |8a12ca23-8728 |2017/01/01 03:02:00| +390123456789 | +440123456701 | 0 | aborted
customerB |54739440-c297 |2017/01/01 03:03:00| +440123456755 | +440123456780 | 0 | aborted
customerA |87e01f74-ce9e |2017/01/01 03:03:01| +390123456789 | +440123456700 | 1 | success
customerB |54739440-c297 |2017/01/01 03:03:02| +440123456755 | +440123456123 | 0 | aborted
customerB |1d192eb7-01b0 |2017/01/01 03:03:03| +440123456755 | +440123456123 | 1 | success
每次尝试都是使用唯一callid进行的调用。 重新尝试意味着:我打电话给你,打电话失败,我再打电话给你,直到通话成功。因此,如果aumber调用bnumber 3次但只有第3次成功,那么我有3次尝试,其中2次重新尝试失败。
我需要得到:
e.g。 customerA于2017年4月1日至30日在全球范围内拨打了1000个电话.600个成功,300个失败,100个中止。 在这些(300 + 100)电话中,有多少人在不到5秒(太快)和20秒内重新尝试。
e.g。 说(300 + 100)个电话是200个人号码。 我想知道那些实际重试相同数字的人的百分比。 如果100个用户只试一次&失败了,剩下的100个用户(这里50%)在他们的号码未能通过验证的情况下尝试了3次。
对我来说,最重要的问题是customerA的call1 call2和call3没有以任何方式链接。因此,如果customerA使用numberA拨打电话到号码B并且它失败(中止或失败),那么他可以反复尝试,直到一个电话成功“#39;
我不是很难解释。希望现在更清楚一点。
结果应该是这样的
customer | aborted_calls | percentage_aborted_5s | percentage_aborted_20s
customerA | 300 | 20 | 40
我试图计算这样的尝试总结,但它没有计算同一次呼叫的所有尝试' (多次打电话的人数没有成功)
select a.anumber,a.bnumber, sum(stat) from
(
select anumber,bnumber,timestamp
,case when status=3 then 0 else 1 end stat --3 is aborted or failed
from mytable
) a
inner join (select * from mytable
)v
on a.anumber=v.anumber and a.bnumber=v.bnumber
where datediff(s,v.timestamp,a.timestamp)<=5
group by a.anumber,a.bnumber
如果我取得了成功,那么计数应该从0开始。