mysql - 如何在 MYSQL 查询中使用聚合函数连接表?

标签 mysql sql database aggregate-functions

我有两个来自数据库的表,我想获取每个 id 的最后状态。尝试添加 INNER JOIN 子句但无济于事。这些是我的数据的样子:

表:雇员

id   name   department
-------------------------
1    A       X
2    B       Y
3    C       Z

表:时间日志

id   time       status    count
-------------------------------
1    08:51       IN       1
3    09:00       OUT      2
2    09:00       IN       3
2    18:00       OUT      4
1    18:05       OUT      5

目前,这是我使用的查询,但需要获取每个员工的姓名。

SELECT 
     *
FROM timelog
WHERE timelog.count
IN   (SELECT MAX(timelog.count)
      FROM timelog
      GROUP BY timelog.id) 
ORDER BY clock.id;

当前输出:

id   time       status
-------------------------------
1    18:05      OUT
2    18:00      OUT
3    09:00      OUT

这是我想要实现的输出:

id   name      time       status
-------------------------------
1    A         18:05      OUT
2    B         18:00      OUT
3    C         09:00      OUT

是否可以将 JOIN 添加到上述查询中?如果不是,解决方法是什么?任何帮助将不胜感激。 TIA。

最佳答案

使用相关子查询获取timelog中每个id的最后一条记录:

SELECT e.*, tl.*
FROM employee e JOIN
     timelog tl
     ON e.id = tl.id
WHERE tl.count = (SELECT MAX(tl2.count)
                  FROM timelog tl2
                  WHERE tl2.id = tl.id
                 ) ;

请注意,您的查询版本不正确。子查询返回每个 id 的最大计数。但是,外部查询可能会将一个不同 id 与子查询中的计数相匹配。关联子句解决了这个问题。

关于mysql - 如何在 MYSQL 查询中使用聚合函数连接表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58922303/

相关文章:

php - 操作后 10 分钟更新数据库

php - Recyclerview MySql int 显示 0

mysql - 多条件mysql

mysql - MYSQL Full GROUP BY 的解决方法

sql - 在 'select then update'的情况下如何避免再次获取数据

php - 在 ProductSell 模型中,有一个日期列类型为 varchar,格式为 d/m/Y 我如何使用其间检索数据?

mysql - 如何获得每辆经过停靠站的公交车的下 2 个停靠时间(GTFS 数据)?

java - Jpa语法错误解析

c# - WebMatrix Helper 控制表在密码更改日期字段中显示错误时间

php - 如何将链接添加到 php 动态生成的表中以返回值?