2017-05-31 72 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