我有两个来自数据库的表,我想获取每个 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/