我从数据库中有两个表,我想获取每个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。
答案 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与子查询中的计数匹配。相关子句解决了这个问题。