我有一个包含以下元素的时钟表(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(使用前将#替换为@)