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

时间:2019-11-18 20:20:01

标签: 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。

2 个答案:

答案 0 :(得分:1)

您可以联接表并使用相关子查询进行过滤:

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
)

答案 1 :(得分:1)

使用相关子查询获取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与子查询中的计数匹配。相关子句解决了这个问题。

相关问题