2017-05-31 70 views
0

我有兩個表agentscalls。代理將始終處於一個正在進行的通話中。可以有另一個掛起的呼叫分配給座席尚未應答的座席。MySQL加入最新一行

我想編寫一個查詢,測試查看按dateCreated排序的最新呼叫是否與座席表中當前處於活動狀態的呼叫相匹配。

這裏就是主動呼叫的座席的呼叫匹配的例子:http://sqlfiddle.com/#!9/af5bd/5

下面是一個例子,其中活動的呼叫沒有代理商的呼叫匹配: http://sqlfiddle.com/#!9/70b7e0/8

我的計算機運行的查詢是

# This does not work 
SELECT count(*) from calls c 
    INNER JOIN agents a ON a.callId = c.id 
ORDER BY c.dateCreated DESC LIMIT 1; 

# This works 
SELECT count(*) from calls c 
    INNER JOIN agents a ON a.callId = (SELECT id FROM calls ORDER BY dateCreated DESC LIMIT 1) 
ORDER BY c.dateCreated DESC LIMIT 1; 

第一個查詢將始終返回1,但第二個查詢起作用。我不喜歡在我的查詢中編寫第二個查詢。有沒有解決的辦法?

更新 也許這是不明確的,但我基本上是想看看在calls表的最新條目callIdagents表匹配。

+0

你在哪裏檢查是否正在通話或在查詢待處理?您爲什麼不選擇代理最近通話的狀態以查看它是否處於活動狀態或掛起狀態? – Barmar

+0

這是我正在做的一個超級簡化的例子。我基本上想看看'calls'表中的最新條目是否與'agents'表中的外鍵'callid'匹配 – Kousha

回答

0

加入agents表與返回最近的呼叫ID的子查詢:

SELECT COUNT(*) 
FROM agents AS a 
JOIN (SELECT id AS latest_call 
     FROM calls 
     ORDER BY dateCreated DESC 
     LIMIT 1) AS c ON a.callid = c.id 
WHERE a.id = @agent_you_care_about