MySQL 连接最新行

标签 mysql join

我有两个表agentscalls。客服人员将始终处于一个事件调用状态。可能有另一个待处理的调用分配给某个座席,而该座席尚未应答。

我想编写一个查询来测试按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/

相关文章:

mysql - 基本 mySQL - 不知道如何显示所有结果,包括 0

mysql - 为什么我的sql用了Max函数却不能用Abs函数?

sql - 需要理解SQL代码中的COUNT()和多个LEFT JOIN错误

如果列中的值不为空,则 MySQL JOIN 条件

php - 无法将变量 'sql_mode' 设置为“REPLACE”的值

php - 如何确定容量达到最大容量的次数

sql - 散列连接和合并连接 (Oracle RDBMS) 之间有什么区别?

c# - 我在C#应用程序中遇到此错误,找不到column2

sql - Postgres 条件选择?

php - 使用 PDO,我如何确保 UPDATE 语句成功?