背景情報:
私の会社では、VoIP サービスに ShoreTel を使用しています。定型レポートは優れていますが、私たちにとって必要のない情報が含まれており、プレゼンテーションはデータを消費するのが最も簡単ではありません. すべてのセールス コールについて 1 つのレポートを作成する必要があります。最終的には、ShoreTel が提供する 2 つの定型レポート (個人レポートとグループ レポート) を組み合わせます。2 つのレポートを結合する理由は、セールス マネージャーが各セールス担当者またはグループの通話を表示してすばやく理解できる 1 つのピボット テーブルを用意するためです。MySQL Workbench でデータベースをリバース エンジニアリングし、必要な特定のデータを返す必要があるすべてのテーブルと列を見つけました。以下にリストされている 3 つのテーブルと列は、レポート/ピボット テーブルで使用しようとしているデータを生成するものです。
agentactivity | Connect | Call
------------- --------- ------
agentactivity.StartTimeStamp | connect.PartyTable | call.CallType
agentactivity.EndTimeStamp | connect.ConnectReason | call.DialedNumber
agentactivity.AgentDN | connect.PartyID | call.CallerID
agentactivity.AgentFirstName | connect.PartyIDName | call.Duration
agentactivity.AgentLastName | connect.Duration | call.Extension
agentactivity.State | connect.TalkTimeSeconds |
agentactivity.WorkgroupDN | |
agentactivity.WorkgroupName | |
私は MySQL の初心者なので、必要なデータを抽出するために使用できるクエリを作成する必要があります。データの一部を取得する個々のクエリを作成できますが (以下を参照)、2 つ (ましてや 3 つ) のテーブルを使用すると、すべてが崩れ始めます。構文と使いやすさに関してこれが正しいことを確認したいのですが、私は独自のクエリを試みました。前述のように、これのポイントは、データベースから必要なすべての情報を含む単一のピボット テーブルを作成することです。
以前に読んだ/試みた:
http://stackoverflow.com/questions/14191506/how-to-join-two-tables <-少しは役に立ちましたが、あまり役に立ちませんでした。まだ混乱しています。
http://stackoverflow.com/questions/22418525/shoretel-outgoing-calls-query <--詳細情報を提供します。これを自分で構築することができましたが、単一の結果にしか使用できませんでした。
http://stackoverflow.com/questions/20405898/multiple-select-case-staments-in-query-for-shoretel-reports?rq=1 <--私の仕事に必要なものではありませんでした。
https://community.spiceworks.com/how_to/69423-shoretel-call-detail-record-lookup <--これまでで最も役に立ち、ニーズに合わせてこれをカスタマイズしてみました。失敗した。
https://www.experts-exchange.com/questions/28286779/Shoretel-SQL-query-in-Excel.html <--データを Excel にダンプするには正しいクエリが必要なため、とにかく役に立ちませんでした。
http://dev.mysql.com/doc/refman/5.7/en/join.html <--テーブルの「結合」についてはここから始めましたが、混乱し始めています。
個々のデータに対するクエリが返されます (正直なところ、これらはもともと私のクエリではなく、ニーズに合わせてカスタマイズしたものです):
SELECT PartyIDName,GroupID,ConnectTime,DisconnectTime,ConnectReason
FROM shorewarecdrarchive.`connect`
WHERE PartyType=12;
SELECT StartTime,DialedNumber,CallerID,EndTime,Extension,CallType
FROM shorewarecdrarchive.`call`
WHERE Extension=6333 AND date(StartTime) BETWEEN '2016-08-01' AND '2016-08-16' AND CallType=3;
SELECT ID, StartTime, StartTimeMS, EndTime, EndTimeMS, TIMEDIFF(EndTime,StartTime) AS `CallDuration`, LongDistance, CallType, CallerID, DialedNumber, Extension
FROM shorewarecdrarchive.`call`
WHERE Extension=6317 DATE(StartTime) = '2016-09-01' AND TIME(StartTime) >= '00:00:00' AND TIME(StartTime) <= '23:59:59' ORDER BY CallType,StartTime;
複数のテーブルを使用したクエリでの私の試み:
SELECT
call.CallType,
call.DialedNumber,
call.CallerID,
call.Duration,
connect.PartyTable,
connect.ConnectReason,
connect.PartyID,
connect.PartyIDName,
connect.PartyIDLastName,
connect.Duration,
connect.TalkTimeSeconds,
agentactivity.StartTimeStamp,
agentactivity.EndTimeStamp,
agentactivity.AgentDN,
agentactivity.AgentFirstName,
agentactivity.AgentLastName,
agentactivity.State,
agentactivity.WorkgroupDN,
agentactivity.WorkgroupName
FROM
shorewarecdrarchive.`call`
INNER JOIN shorewarecdrarchive.`connect`
ON connect.CallTableID=call.ID
INNER JOIN shorewarecdrarchive.'agentactivity'
ON call.Extension=agentactivity.AgentDN
WHERE
TIME(StartTime) >= '00:00:00'
AND TIME(StartTime) <= '23:59:59' BETWEEN '2016-09-01' AND '2016-09-16'
ORDER BY
CallType,StartTime;
これに関するすべての支援をいただければ幸いです。