mysql 时钟

2024-05-04

我有一个包含以下元素的时钟表(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

I get id->12 and action -> 'clockin'代替'back'这绝对是不对的


你缺少一个GROUP BY条款为您的MAX()总计的。您得到正确答案的原因12对于您的第一次查询尝试,仅仅是因为它恰好是表中最大的 ID,同时也恰好属于emp_id = 1。对于任何一个你都会得到相同的结果emp_id价值观。 AGROUP 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);

以供参考,MySQL 聚合函数参考。 http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

mysql 时钟 的相关文章

随机推荐