我有两个表agents
和calls
。客服人员将始终处于一个事件调用状态。可能有另一个待处理的调用分配给某个座席,而该座席尚未应答。
我想编写一个查询来测试按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
表中的最新条目是否与 agents
表中的 callId
匹配。
最佳答案
使用返回最近调用 ID 的子查询连接 agents
表:
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
关于MySQL 连接最新行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44291451/