在MySQL中获得相同日期的最短时间

时间:2014-04-01 05:07:48

标签: mysql sql database

我在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

请任何人帮我解决我要使用的查询。

3 个答案:

答案 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