我确定这很简单,但我是一个完全新手访问,特别是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条记录,所以如果我能得到一些帮助,它会有很大的帮助,我已经试图解决这个问题好几周了!
谢谢!
答案 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似乎不支持它。