2014-04-01 23 views
0

我有一個這樣的考勤表在MySQL獲取有關同一日期最短時間在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

3月5日,ID爲'90010'的員工提交了超過1份出勤數據。 現在,我想在3月5日發佈出勤報告,但是當我運行我的sql時,它總是給出'90010'ID的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

從您的查詢,假設你已經在你的MST_Attendance表的外鍵,你可以做一個查詢表,因爲你有兩列EmpID和EventTime。您需要按的EmpID獲得的最短時間:

SELECT EmpID, MIN(EventTime) as attendancetime 
FROM MST_Attendance 
WHERE DATE(EventTime)='2014-03-05' 
GROUP BY EmpID 

如果需要員工的其他細節結合起來,假設所有的EmpIDs在你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 
+0

它的工作原理,但是當我想顯示上月所有的考勤數據 - 1名僱員(1月31日)(例如:「90010」)給它只是1的結果(最小時間) – christ2702

+1

對不起,我解決了。我只需要按照DATE(EventTime)對它進行分組。感謝名單 – christ2702

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 
1

使用EventTiem的MINGROUP BY將有助於你得到想要的結果

SELECT b.EmpID, MIN(a.EventTime) AS EventTime 
FROM MST_Attendance a, MST_Employee b 
WHERE a.EmpID=b.EmpID 
AND DATE(a.EventTime)='2014-03-05' 
GROUP BY b.EmpID;