2017-10-27 4 views
0

CSRの電話データを取得するための正確なクエリがありますが、1つのCSR拡張でのみテストしています。今は動作しているので、15のすべてのCSRにそれを適用したいと思います。Where句は2つの列のうちの1つで15種類の値を検索します

クエリ:

SELECT 
     sum(Duration) AS total_talk_time_seconds 
     , round(sum(Duration)/60,2) AS total_talk_time_minutes 
     , sum(if(LEGTYPE1 = 1,1,0)) AS total_outbound 
     , sum(if(LEGTYPE1 = 2,1,0) and ANSWERED = 1) AS total_inbound 

FROM cdrdb.session a 
    INNER JOIN cdrdb.callsummary b 
     ON a.NOTABLECALLID = b.NOTABLECALLID 
    where date(b.ts) >= curdate() 
    AND 7200 in (callingpartyno, finallycalledpartyno); 

は、しかし、私は私のwhere句を変更したいので、代わりの「拡張7200がcallingpartynoにある場所を選択し、finallycalledpartyno」それはselect the calls where (7276,7314,7295,7306,7357,7200,7218,7247,7331,7255,7330,7000,7215,7240,7358,7312) IN (callingpartyno, finallycalledpartyno)

を言うだろうと言ってしかし、私は知っていますその構文は15列を必要とするため動作しません。

は、ここでは簡単なアイデアのためのいくつかのサンプルデータです:例えば

callingpartyno | finallycalledpartyno 
    ------------------------------------- 
    1234    outside 
    1234    outside 
    1234    outside 
    outsidecall   1234   
    outsidecall   1234   
    outsidecall   1234   
    9876    outside 
    9876    outside 
    9876    outside 
    outsidecall   9876   
    outsidecall   9876     
    outsidecall   9876  

、内線番号1234が6つのコールを持っていますが、テーブルにあなただけのこれらの列の両方を含むことであることを知っているだろう。

拡張機能の配列にクエリを適用するには、どのような方法が最も正確でパフォーマンスに優れていますか?

+0

アグリゲーションに関わるフォローアップの質問がある場合は、自由に新しい質問をしてください。 –

答えて

2

列ごとにリストを繰り返します(例:

select * 
from calls 
where callingpartyno IN (7276,7314, 7295, 7306,7357,7200,7218,7247 7331,7255,7330,7000,7215, 7240,7358,7312) 
OR finallycalledpartyno IN (7276,7314, 7295, 7306,7357,7200,7218,7247 7331,7255,7330,7000,7215, 7240,7358,7312) 
+0

ありがとう、これは実際に動作しますが、今私は1つの質問があります:これは合計累積データを持つ1つの行を返します。ユーザーIDまたは内線番号とグループとしてそれぞれの4桁の内線番号(呼び出された番号または発信番号にかかわらず)を処理できる方法はありますか。それによって、自分の合計が15行ずつになります。 –

+0

発信側または着信側(またはその両方)でグループ化しますか? –

+0

どちらも技術的に。したがって、7276が6つのコールをコールとして、6つのコールがコールされた場合、それは12行のコールを含む7276の内線に対して1行になります。ですから、各列の同じ4桁の内線番号をグループ化したいのであれば、そのユーザーの内線番号 –

関連する問題