2015-05-05 102 views
1

在下面的鏈接示例中,您將看到來自agentconnectiondetail表的來自Cisco UCCX Express的示例電話數據。SUM信息但保留了ResourceID(EmployeeNum)

這是我正在查詢:

SELECT * 
FROM agentconnectiondetail 
WHERE startdatetime >= TO_DATE('01-01-2015 05:00','%m-%d-%Y %H:%M') 
    AND sessionseqnum = 0 

我的問題是如何讓唯一的SessionID的相關信息,這是呼叫的唯一標識符,但保留誰回答代理的employeenumber呼叫?

例如,我在示例選項卡上的文檔中突出顯示了會話標識43000086306.數據顯示,對於會話標識43000086306,該呼叫進入並在兩個代理位置響起,然後由第三位接收。你看到這個是因爲資源ID改變了,並且記錄了這些位置的振鈴時間爲10秒,但是由於通話時間爲0,電話沒有被接聽。我怎樣才能將振鈴時間累計在一起並保留接聽電話的座席的資源ID號碼。

https://www.dropbox.com/s/9ggxb1ndxp4vid6/sample_data.xlsx?dl=0

+0

輸出中實際需要哪些列。由於答案的複雜性根據預期的輸出而變化。什麼是後端RDBMS? SQL Server?甲骨文? MySQL的? – xQbert

+0

謝謝你的迴應。所需的列將是會話ID(唯一沒有愚蠢),資源ID,開始日期時間,enddatetime,鈴聲,通話時間,保持時間,工作時間。 RMDBS是Informix。 – rynsmns

回答

1

上infomix未經檢驗。我對informix不熟悉,也沒有測試環境。所以我基於ANSII標準嘲笑SQL,避免使用可能特定於數據庫的語法。這導致子查詢可能能夠如果我知道語法更好地避免...

這裏的工作是在SQL Server上雖然SQL Fiddle

SELECT O.SessionID, C.ResourceID, C.StartDateTime, C.EndDateTime, 
    sum(O.ringTime) as TotalRingTime, sum(O.talkTime) as TotalTalkTime, 
    Sum(O.HoldTime) as TotalHoldTime, Sum(O.WorkTime) as TotalWorkTime, 
    count(Distinct O.ResourceID) as CntofRes 
FROM AgentConnectionDetail O 
LEFT JOIN 
(
    SELECT A.SessionID, A.ResourceID, A.StartDateTime, A.EndDateTime 
    FROM AgentConnectionDetail A 
    INNER JOIN (
     SELECT SessionID, Max(StartDateTime) as StartDateTime 
     FROM AgentConnectionDetail 
     GROUP BY SessionID) B 
    on A.SessioNID = B.SessionID 
    and A.StartDateTime = B.StartDateTime) C 
on C.SessionID=O.SessionId 
GROUP BY O.SessionID, C.ResourceID, C.StartDateTime, C.EndDateTime 
ORDER BY SessionID 
  • 假設最大的startDateTime將是代理誰接聽電話......我們從最內層的查詢標記的內聯視圖中獲取會話和日期時間爲B
  • 另外假設一個會話永遠不會有兩個記錄具有完全相同的開始日期時間;然後我們將其加入基表A以獲取應答呼叫的誰的resourceID。這導致包含會話的內聯視圖, 資源,startdatetime,endDateTime,我已Labeled C
  • 我們只是加入這個聚合值。由於這是一對一的關係,我們不必擔心錯誤地增加總價值。因此直接加入應該起作用。

我添加了一個cntOfRes,以顯示該會話中涉及3個資源,並且只模擬了一些數據。

+0

這足以讓我的腦汁再次流動。 TY! – rynsmns

0

使用子查詢可能能夠解決。
但是,根據您讀取的數據量,如果sesisonid存在或不存在索引,則性能可能受損。

SELECT sessionid 
     , (select resourceid from agentconnectiondetail b 
      where a.sessionid = b.sessionid and b.talktime > 0 
     ) as resourceid_talktime 
     , sum(ringtime) as rings 
FROM agentconnectiondetail a 
WHERE startdatetime >= TO_DATE('01-01-2015 05:00','%m-%d-%Y %H:%M') 
    AND sessionseqnum = 0 
group by 1,2 

其他選項,如果您具有正確的索引,可能會獲得更好的性能。

SELECT a.sessionid 
     , b.resourceid 
     , sum(a.ringtime) as rings 
FROM agentconnectiondetail a 
    , (select sessionid, resourceid from agentconnectiondetail where talktime > 0 
     and startdatetime >= TO_DATE('01-01-2015 05:00','%m-%d-%Y %H:%M') 
     and sessionseqnum = 0 
    ) as b 
WHERE a.startdatetime >= TO_DATE('01-01-2015 05:00','%m-%d-%Y %H:%M') 
    AND a.sessionseqnum = 0 
    and a.sessionid = b.sessionid 
group by 1,2