Para que una consulta devuelva una cantidad concreta de registros, utilizamos la cláusula top :
Select Top 10 * From Pedidos;
O bien, si en vez de una cantidad, queremos un porcentaje :
Select Top 10 Percent * From Pedidos;
Pero puede presentarse la siguiente necesidad : Obtener n registros por grupo (ver). En este ejemplo, evidentemente no nos sirve utilizar ‘Top’. Una solución podría ser emplear una subconsulta que evaluara el número de registros devueltos para cada grupo. Y poner como condición que dicho número sea igual a n (ejemplo preparado para ejecutar desde el Editor Sql 1.2:
Parameters n Long;
Create Table Tareas (id Long Primary Key, titulo Text (255), ambito Text (255), prioridad Bit);
Create Table Avance_Tareas (id Long, fecha_avance DateTime, descripcion Text (255));
Insert Into Tareas Values (1, 'Primera', Null, Null);
Insert Into Tareas Values (2, 'Segunda', Null, Null);
Insert Into Avance_Tareas Values (1, #09/30/2008#, Null);
Insert Into Avance_Tareas Values (1, #10/01/2008#, Null);
Insert Into Avance_Tareas Values (1, #10/02/2008#, Null);
Insert Into Avance_Tareas Values (1, #10/06/2008#, Null);
Insert Into Avance_Tareas Values (2, #09/30/2007#, Null);
Insert Into Avance_Tareas Values (2, #10/10/2007#, Null);
Insert Into Avance_Tareas Values (2, #10/11/2007#, Null);
Insert Into Avance_Tareas Values (2, #10/10/2008#, Null);
Select tareas.titulo, tareas.ambito, tareas.prioridad, avance_tareas.fecha_avance, avance_tareas.descripcion From tareas Inner Join Avance_Tareas On tareas.id = Avance_Tareas.id
Where (Select Count(*) From avance_tareas As T Where T.id = tareas.Id And T.fecha_avance >= Avance_Tareas.fecha_avance) < = n;
Drop Table Tareas;
Drop Table Avance_Tareas;
Fuente: Ejemplos de lenguaje sql para Access