gpt4 book ai didi

mysql时钟

转载 作者:行者123 更新时间:2023-11-29 01:04:33 25 4
gpt4 key购买 nike

我有一个包含以下元素的时钟表 (id(pk), action, emp_id(fk), time )。

如果我将 emp_id 传递给查询,我如何选择最新的操作?

id  emp_id  action  current_time
-----------------------------------------------
1 1 clockin 2012-01-29 21:52:38
2 1 clockout 2012-01-29 21:54:24
3 3 clock in 2012-01-30 21:10:51
4 4 clock in 2012-01-30 21:10:51
5 9 clock in 2012-01-30 21:11:05
6 10 clock in 2012-01-30 21:11:05
7 10 go to meal 2012-01-30 21:11:38
8 9 go to meal 2012-01-30 21:11:38
9 9 back 2012-01-30 21:12:53
10 3 back 2012-01-30 21:12:53
11 2 back 2012-01-30 21:12:53
12 1 back 2012-01-30 21:12:53

如果我这样写查询:

SELECT MAX(ID) FROM timeclock WHERE emp_id = 1 

我得到 12 这是正确的但是如果我

SELECT MAX(ID) , action FROM timeclock WHERE emp_id = 1

我明白了id->12action -> 'clockin' 而不是 'back' 这绝对是不对的

最佳答案

您缺少 MAX() 聚合的 GROUP BY 子句。您在第一次查询尝试中得到正确答案 12 的原因仅仅是因为它恰好是表中最大的 ID,同时也巧合地属于 emp_id = 1。对于任何 emp_id 值,您都会得到相同的结果。 GROUP BY 子句将解决这个问题。

下面是一个为关联记录检索整行的示例:

SELECT * FROM timeclock 
WHERE id = (SELECT MAX(id) AS id FROM timeclock WHERE emp_id = 1 GROUP BY emp_id);

这也可以通过 HAVING 子句完成,不需要子查询:

SELECT action 
FROM timeclock
WHERE emp_id = 1
GROUP BY emp_id
HAVING id = MAX(id);

供引用,the MySQL aggregate functions reference.

关于mysql时钟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9090280/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com