Ver Mensaje Individual
  #8 (permalink)  
Antiguo 06/05/2018, 17:14
Avatar de julia2021
julia2021
 
Fecha de Ingreso: diciembre-2014
Ubicación: Mexico
Mensajes: 152
Antigüedad: 9 años, 10 meses
Puntos: 11
Respuesta: CONSULTA MySQL: CUAL ES EL ALUMNO MAS JOVEn ?

Cita:
Iniciado por leonardo_josue Ver Mensaje
Hola Julia2021:

La consulta que planteas tiene un problema al utilizar la sentencia IN cuando hay un alumno con una fecha de nacimiento igual al Mínimo de otra aula, me explico, supongamos que tienes estos datos:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM alumnos;
  2. +-----------+------------------+-------------------+---------------------+
  3. | id_alumno | id_aula_de_clase | nombre_del_alumno | fecha_de_nacimiento |
  4. +-----------+------------------+-------------------+---------------------+
  5. |         1 |                1 | hugo              | 2000-01-01 00:00:00 |
  6. |         2 |                1 | paco              | 2000-01-02 00:00:00 |
  7. |         3 |                1 | luis              | 2000-01-04 00:00:00 |
  8. |         4 |                2 | pepe              | 2000-01-04 00:00:00 |
  9. |         5 |                2 | leo               | 2000-01-05 00:00:00 |
  10. |         6 |                2 | chuy              | 2000-01-06 00:00:00 |
  11. +-----------+------------------+-------------------+---------------------+
  12. 6 rows in set (0.00 sec)
  13.  
  14. mysql> SELECT * FROM aula_de_clase;
  15. +------------------+-----------------+
  16. | id_aula_de_clase | Nombre_del_aula |
  17. +------------------+-----------------+
  18. |                1 | aula uno        |
  19. |                2 | aula dos        |
  20. +------------------+-----------------+
  21. 2 rows in set (0.00 sec)

Entonces, con la consulta que planteas tienes esto:

Código MySQL:
Ver original
  1. mysql> SELECT
  2.     -> aula_de_clase.id_aula_de_clase,
  3.     -> aula_de_clase.Nombre_del_aula AS AULA,
  4.     -> alumnos.nombre_del_alumno AS 'NOMBRE DEL ALUMNO'
  5.     -> FROM alumnos
  6.     -> INNER JOIN aula_de_clase
  7.     -> ON aula_de_clase.id_aula_de_clase = alumnos.id_aula_de_clase
  8.     -> WHERE fecha_de_nacimiento IN (SELECT MIN(fecha_de_nacimiento)
  9.     ->                               FROM alumnos
  10.     ->                               GROUP BY id_aula_de_clase)
  11.     -> ORDER BY aula_de_clase.Nombre_del_aula;
  12. +------------------+----------+-------------------+
  13. | id_aula_de_clase | AULA     | NOMBRE DEL ALUMNO |
  14. +------------------+----------+-------------------+
  15. |                2 | aula dos | pepe              |
  16. |                1 | aula uno | hugo              |
  17. |                1 | aula uno | luis              |
  18. +------------------+----------+-------------------+
  19. 3 rows in set (0.00 sec)

Para el aula UNO aparecen dos alumnos, HUGO Y LUIS, aunque el menor sería HUGO, esto es porque LUIS tiene la misma fecha de nacimiento que PEPE, que es el menor del aula DOS.

Entonces, lo que tienes que hacer es algo así:

Código MySQL:
Ver original
  1. mysql> SELECT
  2.     -> aula_de_clase.id_aula_de_clase,
  3.     -> aula_de_clase.Nombre_del_aula AS AULA,
  4.     -> alumnos.nombre_del_alumno AS 'NOMBRE DEL ALUMNO'
  5.     -> FROM alumnos
  6.     -> INNER JOIN aula_de_clase
  7.     -> ON alumnos.id_aula_de_clase = Aula_de_clase.id_aula_de_clase
  8.     -> INNER JOIN
  9.     -> ( SELECT
  10.     ->     id_aula_de_clase,
  11.     ->     MIN(fecha_de_nacimiento) min_fecha
  12.     ->   FROM alumnos
  13.     ->   GROUP BY id_aula_de_clase) T
  14.     -> ON  T.id_aula_de_clase = alumnos.id_aula_de_clase
  15.     -> AND T.min_fecha = alumnos.fecha_de_nacimiento;
  16. +------------------+----------+-------------------+
  17. | id_aula_de_clase | AULA     | NOMBRE DEL ALUMNO |
  18. +------------------+----------+-------------------+
  19. |                1 | aula uno | hugo              |
  20. |                2 | aula dos | pepe              |
  21. +------------------+----------+-------------------+
  22. 2 rows in set (0.00 sec)

Haz la prueba y nos comentas.

Saludos
Leo.
Tienes razón amiguito @leonardo_josue , lo he probado y es cierto. Gracias por la corrección