访问SQL查询:查找每个培训课程的每个员工的最新日期条目

时间:2013-06-18 08:40:49

标签: sql ms-access

我确定这很简单,但我是一个完全新手访问,特别是SQL,基本上我为安全公司工作,我需要创建一个查询,只为每个员工提供每个课程的最新培训。

我有一个访问表,如下所示:

  

员工ID ...课程ID ....课程日期....有效期至今   
.... 12 ...................... 2 ................. 01 /02/2013.....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

(很抱歉,我的HTML也不是很好)
对于achive来说,只有最近每位员工每次培训的清单,所以看起来像这样:

  
    

员工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

  

我的桌子上有大约10,000条记录,所以如果我能得到一些帮助,它会有很大的帮助,我已经试图解决这个问题好几周了!

谢谢!

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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-access似乎不支持它。