我在MySQL中有这样的出勤表
EmpID | EVENTTIME
90010 | 2014-03-05 06:50:30
90010 | 2014-03-05 06:50:45
90010 | 2014-03-05 06:51:02
90020 | 2014-03-05 06:52:50
90030 | 2014-03-05 06:55:47
ID为' 90010'的员工3月5日提交超过1个出勤数据。 现在,我想在3月5日报告出席情况,但是当我运行我的sql时,它总是为ID' 90010'提供3条记录。 这是我的查询
SELECT b.EmpID, a.EventTime
FROM MST_Attendance a, MST_Employee b
WHERE a.EmpID=b.EmpID
AND DATE(a.EventTime)='2014-03-05'
该查询给出的结果与表内容完全相同。实际上,我需要这样的结果:
90010 | 2014-03-05 06:50:30
90020 | 2014-03-05 06:52:50
90030 | 2014-03-05 06:55:47
请任何人帮我解决我要使用的查询。
答案 0 :(得分:1)
使用带有MIN
的{{1}} EventTiem将帮助您获得所需的结果
GROUP BY
答案 1 :(得分:0)
SELECT b.EmpID, MIN(a.EventTime) minEventTime
FROM MST_Attendance a, MST_Employee b
WHERE a.EmpID=b.EmpID
AND DATE(a.EventTime)='2014-03-05'
GROUP BY b.EmpID
答案 2 :(得分:0)
从您的查询中,假设您的MST_Attendance表上已经有外键,您可以在该表上执行查询,因为您在那里有两列EmpID和EventTime。您需要按EmpID分组才能获得最短时间:
SELECT EmpID, MIN(EventTime) as attendancetime
FROM MST_Attendance
WHERE DATE(EventTime)='2014-03-05'
GROUP BY EmpID
如果您需要结合员工的其他详细信息,假设您的所有EmpID在您的MST_Employee表中都是唯一的,您可以使用别名并嵌套上面的查询,然后是右连接:
SELECT a.*, b.attendancetime
FROM MST_Employee a
RIGHT JOIN (
SELECT EmpID, MIN(EventTime) as attendancetime
FROM MST_Attendance
WHERE DATE(EventTime)='2014-03-05'
GROUP BY EmpID
) b
ON a.EmpID = b.EmpID