2013-06-18 24 views
1

我敢肯定,這是非常簡單的事情,但在訪問即時通訊一個完整的新手尤其是SQL,基本上我一個安全公司工作,我需要創建這個查詢僅爲每個員工提供每門課程的最近一次培訓。訪問SQL查詢:查找每個員工每個培訓班日期最近入口

我有一個表在訪問它看起來像這樣:

員工ID ...課程ID ....課程日期....有效迄今爲止
.... 12 .. .................... 2 ................. 2013年1月2日..... 01/02/2014
.... 13 ...................... 1 ................. 20/09/2012 ..... 20/09/2012
.... 12 ...................... 2 ..... ............ 01/02/2012 ..... 01/02/2013
.... 12 ................ ...... 3 ................. 15/06/2013 ..... 15/06/2014
.... 13 .... ................ .2 ................. 15/06/2013 ..... 15/06/2014
.... 13 ........ .............. 1 ................. 19/09/2011 ..... 19/09/2012

(很抱歉的fullstops即時通訊不是很大,在HTML要麼)
什麼ID喜歡才達到是隻有最近的每名員工每次培訓的列表,這樣的東西,看起來像這樣:

員工ID ...課程ID ....課程日期....有效迄今爲止
.... 12 ...................... 2 ................. 01/02/2013 ..... 01/02/2014
.... 13 ...................... 1 ......... ........ 20/09/2012 ..... 20/09/2012
.... 12 .................... .3 ................. 15/06/2013 ..... 15/06/2014
.... 13 ........ .............. 2 ................. 15/06/2013 ..... 15/06/2014

Theres在我的桌子上有大約10,000條記錄,所以如果我能得到一些幫助,這將有助於一個地獄,我一直試圖解決這個問題,現在已經有數週了!

謝謝!

回答

1

下面的查詢應返回你想要的結果:

SELECT t1.* 
FROM 
    Training t1 
    INNER JOIN 
    (
     SELECT [Employee ID], [Course ID], MAX([Course Date]) AS MaxDate 
     FROM Training 
     GROUP BY [Employee ID], [Course ID] 
    ) t2 
     ON t1.[Employee ID]=t2.[Employee ID] 
      AND t1.[Course ID]=t2.[Course ID] 
      AND t1.[Course Date]=t2.MaxDate 
+0

太謝謝你了!那完美的工作! – clarerome

+0

該解決方案產生了不可更新的數據集(至少在最近版本的Access),因此,如果這是一個問題,@ user2407364答案是更好 –

0
select * from t1 as tt where course_date in 
(select max(course_date) from t1 where employeeid==tt.employeeid and 
courseid = tt.courseid); 

相反,你也可以使用ROW_NUMBER,但MS-訪問似乎並不支持它。

+0

這是對我最好的答案,因爲輸出數據集是可更新 –