mysql时钟

时间:2012-02-01 03:17:29

标签: mysql

我有一个包含以下元素的时钟表(id(pk)actionemp_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',这绝对不是正确的

1 个答案:

答案 0 :(得分:0)

您错过了GROUP BY汇总的MAX()条款。您第一次尝试查询时得到正确答案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.