2013-10-28 35 views
0

我有一個表中的不同領域,如如何避免重複呼叫的CDR的

 
Caller_id 
Called_number 
Date 
time 
Minutes 
Charges 

,同時爲客戶提取票據,有重疊的電話,我想,如果你指導我的SQL腳本意識到如何避免重疊呼叫。

例如。在一個Caller_id中,同時出現兩個呼叫,而這是不可能的。

 
CallerId Called_number Date   Time   Minutes Charges 
5555555555 42555777777 9/12/2013 17:15:46 44  44 
5555555555 5556666666 9/12/2013 17:21:28 5  9.25 

預先感謝

+4

Actua lly,這是可能的。我在CDR中看過很多次。有些用戶在通話過程中發起三方會議。另外,在某些系統上,可以向客戶收取入站呼叫。我已經看到客戶正在打電話的情況,並且在該呼叫期間收到一個入站收費虛擬機。我很欣賞你正在尋找一些腳本來處理這個問題,但我認爲找到問題的根源非常重要 - 否則,你會怎麼做 - 忽略第二次(或第三次或第四次)費用? – SimonGoldstone

回答

1

像@SimonGoldstone所述CDRs重疊可以從許多原因發生:

  • 的數據是由多個服務器,而無需NTP收集。
  • 每臺服務器使用不同的時區。
  • 電話會議

如果你想提取包含電話,你可以使用下面的代碼:

create table t (
Caller_id bigint, 
Called_number bigint, 
call_date datetime, 
duration float, 
charge float); 
insert into t 
values 
(5555555555, 42555777777, '2013-12-09 17:15:46', 44, 44), 
(5555555555, 5556666666, '2013-12-09 17:21:28', 5,9.25); 

select t.* 

from t join (select caller_id, called_number, call_date as start_date, 
     date_add(call_date,INTERVAL duration minute) as end_date from t) t1 on (t.caller_id = t1.caller_id and t.call_date between t1.start_date and t1.end_date) where t.called_number != t1.called_number 

你也可以看看這個帖子: Overlapping Date Ranges - Identifying Only the Overlap