Sql 如何获得每个主记录的最后2个详细信息?

Sql 如何获得每个主记录的最后2个详细信息?,sql,ms-access-2010,master-detail,Sql,Ms Access 2010,Master Detail,我需要一个MS Access中的查询,该查询将返回到每个学生完成的最后一堂课。数据如下所示: 学生 ID | StudentName 1 John 2 Bill 3 Ted 4 Edward 培训细节 ID | StudentID | ClassName | Date 1 1 Math 10/10/2012 2 1 Science 12/10

我需要一个MS Access中的查询,该查询将返回到每个学生完成的最后一堂课。数据如下所示:

学生

 ID  | StudentName
 1     John
 2     Bill
 3     Ted
 4     Edward
培训细节

   ID   | StudentID  | ClassName | Date
   1      1            Math        10/10/2012
   2      1            Science     12/10/2012
   3      2            Math        10/10/2012
   4      3            Math        10/10/2012
   5      2            Art         09/10/2012
   6      2            History     02/10/2012
   7      3            Science     12/10/2012
   8      3            History     02/10/2012
   9      4            Music       12/10/2012 
期望输出

Name   | Class     | Date 
John     Science     12/10/2012
John     Math        10/10/2012
Bill     Math        10/10/2012
Bill     Art         09/10/2012
Ted      Science     12/10/2012
Ted      Math        10/10/2012
Edward   Music       12/10/2012
我尝试使用SELECTTOP2子句,但总共只得到2条记录。我想我需要某种类型的循环来获取每个学生以及每个学生的前2个记录,但我无法在一个查询中获取所有记录。

如果我们使用自连接查询,我们可以为每个学生的各个类分配一个排名1=最近:

选择 t1.学生, t1.ClassName, t1.日期, 把*算作等级 从…起 培训详情如t1所示 内连接 培训详情如t2所示 在t2.StudentID=t1.StudentID上 t2.日期>=t1.日期 分组 t1.学生, t1.ClassName, t1.日期 按1、4顺序订购 返回

学生ID类名日期排名 ----- ----- ----- -- 1科学2012-12-10 1 1数学2012-10-10 2 2数学2012-10-10 1 2第2012-09-10条2 2历史2012-02-10 3 3科学2012-12-10 1 3数学2012-10-10 2 3历史2012-02-10 3 4音乐2012-12-10 1 我们可以将其与[Students]合并以获得名称,并将结果限制为Rank=t1.Date的结果 分组 t1.学生, t1.ClassName, t1.日期 AS cr 在cr.StudentID=s.ID上
其中cr.Rank尝试以下查询。我有一个与SQLServer的工作,但应该工作的访问。您可以根据需要订购结果

选择s.StudentName、t.classname、t.date 来自学生的 t.StudentID=s.id上的内部连接培训详细信息t 其中t.日期在选择前2个t2.日期 来自培训详情t2 其中t2.StudentID=s.ID 按t2订购。日期说明 已更正代码以使用Access SQL