2017-08-01 5 views
0

あるスキーマからデータを取得し、別のスキーマの特定のテーブル/フォーマットに挿入するために使用されている動作中のMySQL文(mysql workbenchを使用)があります-のみ)。間隔でデータをフィルタリングするためにMySQL文を変更する

概要:1日を通して集計する必要があるCSRエージェントのコールデータと通話時間を記録します。

フォーマットが正しく、ステートメントがデータを正しく挿入しますが、特定のパラメータに合わせて少し修正する必要があります。今実行される方法は毎回挿入されます(目標は15分ごとにイベントにすることです)が、特定の拡張機能に対して重複する可能性があります。

15分ごとに「拡張機能/拡張機能IDがすでに存在する場合は、既存のデータに新しいデータを追加してください。そうでなければ、この拡張機能の新しいレコードを作成してください」というメッセージが必要です。この方法では、エージェント1が終日働いている場合は、1日を通してコール分を追加することができますが、エージェント2は半日で動作し、その時間だけ追加できます。

既存のクエリ:

Insert into test.ambition_test(ExtID, Extension, Total_Talk_Time_seconds,Total_Talk_Time_minutes,Total_Outbound, Total_Inbound, Missed_Calls, Total_Calls) 
SELECT 
RESPONSIBLEUSEREXTENSIONID as ExtID 
, c.extension as Extension 
, 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)) as Total_Inbound 
, sum(if(Answered = 1,0,1)) as Missed_Calls 
, count(DISTINCT b.NOTABLECALLID) as Total_Calls 
    FROM cdrdb.session a 
    JOIN cdrdb.callsummary b 
    ON a.NOTABLECALLID = b.NOTABLECALLID 
    join cdrdb.mxuser c 
     ON a.RESPONSIBLEUSEREXTENSIONID = c.EXTENSIONID 
     -- WHERE b.ts > (now() - interval 15 minute) 
    GROUP BY a.RESPONSIBLEUSEREXTENSIONID 
    ORDER BY Total_Talk_Time_minutes DESC 

私は最後の15分から引っ張る行をコメントアウトが、私はそれを追加する必要があるのに対し、それはただの仕事の時間をシミュレートし、それが最新のデータのみを引っ張りますリアルタイムで最新のデータをアップし、15分ごとに実行するように設定します。

HOw私はこれを変更して既存の内線番号を更新し、新しい内線番号を追加することはできますか?

オプションがある場合は、毎日の最終日の合計を保持し、毎日新しい挿入を開始したいと思います。

答えて

1

私が正しく理解していれば、下の方があなたの問題を解決します。

Insert into test.ambition_test(ExtID, Extension, Total_Talk_Time_seconds,Total_Talk_Time_minutes,Total_Outbound, Total_Inbound, Missed_Calls, Total_Calls) 
    select * from (SELECT 
    RESPONSIBLEUSEREXTENSIONID as ExtID 
    , c.extension as Extension 
    , 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)) as Total_Inbound 
    , sum(if(Answered = 1,0,1)) as Missed_Calls 
    , count(DISTINCT b.NOTABLECALLID) as Total_Calls 
     FROM cdrdb.session a 
     JOIN cdrdb.callsummary b 
     ON a.NOTABLECALLID = b.NOTABLECALLID 
     join cdrdb.mxuser c 
      ON a.RESPONSIBLEUSEREXTENSIONID = c.EXTENSIONID 
      -- WHERE b.ts > (now() - interval 15 minute) 
     GROUP BY a.RESPONSIBLEUSEREXTENSIONID 
     ORDER BY Total_Talk_Time_minutes DESC) as tmp where (ExtID, Extension) not in (select ExtID, Extension from test.ambition_test) 
+0

ありがとう、申し訳ありませんが、私はすべての適切なスポットで意味をなさない。これはまだテーブルに入っていない人を追加するようですが、私はこれを行うことができるようにしたいのですが、15分前の最後の仕事のテーブルにその拡張が既にある場合、テーブルを更新しますそれらの新しいレコードに加えて新しい合計。 –

関連する問題