Mejorar Subconsulta

22/11/2005 - 01:29 por Matías L | Informe spam
Hola a todos, tengo la tabla Notas:
IdAlumno Idmateria IdEtapa Curso Nota Fecha
1 4 1 1AM 6 01/03/2005
1 4 1 1AM 4 01/04/2005
1 4 1 1AM 8 01/05/2005
1 4 2 1CT 9 01/06/2005
1 4 2 1CT 5 01/07/2005
1 4 2 1CT 7 01/08/2005

Lo que me hace falta es saber en que Curso el alumno tuvo la ultima Nota
esto me lo dice la Fecha mayor, en este caso 01/08/2005, probé con una
subconsulta
pero no logro darle, el resultado deberia ser así:

IdAlumno Idmateria IdEtapa Curso Nota Fecha UltimoCurso
1 4 1 1AM 6 01/03/2005 1CT
1 4 1 1AM 4 01/04/2005 1CT
1 4 1 1AM 8 01/05/2005 1CT
1 4 2 1CT 9 01/06/2005 1CT
1 4 2 1CT 5 01/07/2005 1CT
1 4 2 1CT 7 01/08/2005 1CT

Mi idea es algo asi:
SELECT *, UltimoCurso = (SELECT TOP 1 CURSO FROM NOTAS WHERE Fecha = (select
max(Fecha) from NOTAS))
FROM NOTAS WHERE IDALUMNO = 1

Me funciona, pero ¿Hay alguna forma mas óptima o facil para hacer esto?, ya
que esta tabla con el tiempo va a crecer bastante.

Saludos y mil gracias.
 

Leer las respuestas

#1 Alejandro Mesa
22/11/2005 - 02:16 | Informe spam
Trata:

select *
from notas as a
where fecha = (
select max(b.fecha) from notas as b where b.IdAlumno = a.IdAlumno
)


select a.*
from notas as a
inner join (
select IdAlumno, max(fecha) as max_fecha
from notas
group by IdAlumno
) as b
on a.IdAlumno = b.IdAlumno and a.fecha = b.max_fecha
go


AMB

"Matías L" wrote:

Hola a todos, tengo la tabla Notas:
IdAlumno Idmateria IdEtapa Curso Nota Fecha
1 4 1 1AM 6 01/03/2005
1 4 1 1AM 4 01/04/2005
1 4 1 1AM 8 01/05/2005
1 4 2 1CT 9 01/06/2005
1 4 2 1CT 5 01/07/2005
1 4 2 1CT 7 01/08/2005

Lo que me hace falta es saber en que Curso el alumno tuvo la ultima Nota
esto me lo dice la Fecha mayor, en este caso 01/08/2005, probé con una
subconsulta
pero no logro darle, el resultado deberia ser así:

IdAlumno Idmateria IdEtapa Curso Nota Fecha UltimoCurso
1 4 1 1AM 6 01/03/2005 1CT
1 4 1 1AM 4 01/04/2005 1CT
1 4 1 1AM 8 01/05/2005 1CT
1 4 2 1CT 9 01/06/2005 1CT
1 4 2 1CT 5 01/07/2005 1CT
1 4 2 1CT 7 01/08/2005 1CT

Mi idea es algo asi:
SELECT *, UltimoCurso = (SELECT TOP 1 CURSO FROM NOTAS WHERE Fecha = (select
max(Fecha) from NOTAS))
FROM NOTAS WHERE IDALUMNO = 1

Me funciona, pero ¿Hay alguna forma mas óptima o facil para hacer esto?, ya
que esta tabla con el tiempo va a crecer bastante.

Saludos y mil gracias.



Preguntas similares