如何在MYSQL查询中使用汇总函数联接表?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在MYSQL查询中使用汇总函数联接表?相关的知识,希望对你有一定的参考价值。
我有两个数据库表,我想获取每个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。
答案
使用相关子查询获取id
中每个timelog
的最后一条记录:
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的最大计数。但是,外部查询可能会将different id与子查询中的计数匹配。相关子句解决了此问题。
另一答案
您可以联接表并使用correlated子查询进行过滤:
select
e.id,
e.name,
t.time,
t.status
from employee e
inner join timelog t on t.id = e.id
where t.count = (
select max(count)
from timelog t1
where t1.id = t.id
)
以上是关于如何在MYSQL查询中使用汇总函数联接表?的主要内容,如果未能解决你的问题,请参考以下文章