Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

[SOLUCIONADO] CONSULTA MySQL: CUAL ES EL ALUMNO MAS JOVEn ?

Estas en el tema de CONSULTA MySQL: CUAL ES EL ALUMNO MAS JOVEn ? en el foro de Mysql en Foros del Web. Hola mi amiguitos, tengo la siguiente tabla: Tabla: Alumnos - id_alumno - id_aula_de_clases - nombre_del_alumno - fecha_de_nacimiento (datetime) Tabla: Aula_de_clases - id_aula_de_clases - Nombre_del_aula ¿ ...
  #1 (permalink)  
Antiguo 03/05/2018, 22:18
Avatar de julia2021  
Fecha de Ingreso: diciembre-2014
Ubicación: Mexico
Mensajes: 152
Antigüedad: 9 años, 11 meses
Puntos: 11
Sonrisa CONSULTA MySQL: CUAL ES EL ALUMNO MAS JOVEn ?

Hola mi amiguitos, tengo la siguiente tabla:

Tabla: Alumnos
- id_alumno
- id_aula_de_clases
- nombre_del_alumno
- fecha_de_nacimiento (datetime)

Tabla: Aula_de_clases
- id_aula_de_clases
- Nombre_del_aula

¿ Cómo sería mi consulta para saber unicamente cual es el alumno de menor edad de cada aula de clases ?

Última edición por julia2021; 04/05/2018 a las 05:50
  #2 (permalink)  
Antiguo 04/05/2018, 07:39
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: CONSULTA MySQL: CUAL ES EL ALUMNO MAS JOVEn ?

un consulta con un min por el campo fecha de nacimiento agrupada por aula de clases y nombre del alumno podria ser algo asi


Código MySQL:
Ver original
  1. select min(fechanacimiento),  Nombre_del_aula, nombre_del_alumno
  2. from alumnos as t1
  3. inner join Aula_de_clases as t2 on (t1.id_Aula_de_clases=t2.id_aula_de_clases)
  4. group by Nombre_del_aula, nombre_del_alumno
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 04/05/2018, 09:52
Avatar de julia2021  
Fecha de Ingreso: diciembre-2014
Ubicación: Mexico
Mensajes: 152
Antigüedad: 9 años, 11 meses
Puntos: 11
Respuesta: CONSULTA MySQL: CUAL ES EL ALUMNO MAS JOVEn ?

Cita:
Iniciado por Libras Ver Mensaje
un consulta con un min por el campo fecha de nacimiento agrupada por aula de clases y nombre del alumno podria ser algo asi


Código MySQL:
Ver original
  1. select min(fechanacimiento),  Nombre_del_aula, nombre_del_alumno
  2. from alumnos as t1
  3. inner join Aula_de_clases as t2 on (t1.id_Aula_de_clases=t2.id_aula_de_clases)
  4. group by Nombre_del_aula, nombre_del_alumno
@Libras gracias, pero te cuento, cuando lo probe como me indicas y me aparecen correctamente ordenados, pero me aparecen todos los alumnos y quiero que solo me aparezca el mas joven de cada aula, es decir, si tengo 5 aulas, me deberian aparecer 5 alumnos en donde cada alumno es el mas joven su respectiva aula.

He probado dejando solo group by Nombre_del_aula pero entonces me muestra un alumno por cada aula, pero ese alumno corresponde al de menor id_alumno y no al de menor fecha_nacimiento.

Se ve sencillo, pero no sé que más probar, estoy ya vuelta loca
  #4 (permalink)  
Antiguo 04/05/2018, 09:58
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: CONSULTA MySQL: CUAL ES EL ALUMNO MAS JOVEn ?

entonces podriamos intentar algo asi:



Código MySQL:
Ver original
  1. select min(fechanacimiento),  id_alumno , id_aula_de_clases
  2. from alumnos
  3. group by  id_alumno, id_aula_de_clases

Aqui deberia de presentarte nada mas el mas joven por cada aula
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 04/05/2018, 10:07
Avatar de julia2021  
Fecha de Ingreso: diciembre-2014
Ubicación: Mexico
Mensajes: 152
Antigüedad: 9 años, 11 meses
Puntos: 11
Respuesta: CONSULTA MySQL: CUAL ES EL ALUMNO MAS JOVEn ?

Cita:
Iniciado por Libras Ver Mensaje
entonces podriamos intentar algo asi:



Código MySQL:
Ver original
  1. select min(fechanacimiento),  id_alumno , id_aula_de_clases
  2. from alumnos
  3. group by  id_alumno, id_aula_de_clases

Aqui deberia de presentarte nada mas el mas joven por cada aula
Amigo @Libras , probandolo asi como me indicas, me salen 2 errores, me aparecen listados toooodos los alumnos y adicionalmente ordenados por el id_alumno y no por fechanacimiento. Por Dios que he hecho consultas mas dificiles y esta es la que me esta haciendo el dia ;-( no sé como más probar o no sé si me falta algo
  #6 (permalink)  
Antiguo 04/05/2018, 12:17
Avatar de julia2021  
Fecha de Ingreso: diciembre-2014
Ubicación: Mexico
Mensajes: 152
Antigüedad: 9 años, 11 meses
Puntos: 11
Sonrisa Respuesta: CONSULTA MySQL: CUAL ES EL ALUMNO MAS JOVEn ?

Amigo lo logre, yesssssssssssss,aquí te comparto la consulta:
Código MySQL:
Ver original
  1. SELECT aula_de_clase.id_aula_de_clase, aula_de_clase.nombre AS AULA, alumnos.nombre AS 'NOMBRE DEL ALUMNO'
  2. FROM alumnos
  3. INNER JOIN aula_de_clase
  4. ON aula_de_clase.id_aula_de_clase = alumnos.id_aula_de_clase
  5. WHERE fecha_nacimiento IN (SELECT MIN(fecha_nacimiento) FROM alumnos GROUP BY id_aula_de_clase)
  6. ORDER BY aula_de_clase.nombre
: porra:
  #7 (permalink)  
Antiguo 04/05/2018, 15:38
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 10 meses
Puntos: 447
Respuesta: CONSULTA MySQL: CUAL ES EL ALUMNO MAS JOVEn ?

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.
  #8 (permalink)  
Antiguo 06/05/2018, 17:14
Avatar de julia2021  
Fecha de Ingreso: diciembre-2014
Ubicación: Mexico
Mensajes: 152
Antigüedad: 9 años, 11 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
  #9 (permalink)  
Antiguo 07/05/2018, 00:54
 
Fecha de Ingreso: mayo-2011
Ubicación: Palma de Mallorca
Mensajes: 108
Antigüedad: 13 años, 5 meses
Puntos: 4
Respuesta: CONSULTA MySQL: CUAL ES EL ALUMNO MAS JOVEn ?

Hola,

creo que nos estamos equivocando en como sacar el alumno más joven.

Si sacamos el MIN() de las fechas, por ejemplo estas 3 (19/03/2004, 23/04/2004, 11/11/2004), devolvería el 19/03/2004 y creo que el más joven es el que ha nacido en noviembre no?

Así que en vez de usar la función MIN() cambiarla por la función MAX().

Y así ya estaría correcto al 100%.

Un saludo a todos.
  #10 (permalink)  
Antiguo 07/05/2018, 07:15
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: CONSULTA MySQL: CUAL ES EL ALUMNO MAS JOVEn ?

Como? El mas joven es el que nacio primero mi estimado, no el que nacio al ultimo, por lo tanto el que nacio en Marzo es mas joven que el que nacio en Noviembre
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #11 (permalink)  
Antiguo 07/05/2018, 13:00
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 10 meses
Puntos: 447
Respuesta: CONSULTA MySQL: CUAL ES EL ALUMNO MAS JOVEn ?

Cita:
Si sacamos el MIN() de las fechas, por ejemplo estas 3 (19/03/2004, 23/04/2004, 11/11/2004), devolvería el 19/03/2004 y creo que el más joven es el que ha nacido en noviembre no?

Así que en vez de usar la función MIN() cambiarla por la función MAX().
Absolutamente de acuerdo tonigomila1988, estamos equivocándonos con el planteamiento... es como dices, quien nació al último (MAX) es el más joven... quien nació primero (MIN) es quien tiene más edad o el más viejo.

Buena corrección.

Saludos
Leo.
  #12 (permalink)  
Antiguo 08/05/2018, 00:14
 
Fecha de Ingreso: mayo-2011
Ubicación: Palma de Mallorca
Mensajes: 108
Antigüedad: 13 años, 5 meses
Puntos: 4
Respuesta: CONSULTA MySQL: CUAL ES EL ALUMNO MAS JOVEn ?

Cita:
Iniciado por Libras Ver Mensaje
Como? El mas joven es el que nacio primero mi estimado, no el que nacio al ultimo, por lo tanto el que nacio en Marzo es mas joven que el que nacio en Noviembre
Hola Libras, dime que es una broma lo que has escrito... Porque me costaría mucho asimilar que lo dices en serio y convencido. ¿Como crees posible que una persona que haya nacido en Marzo del año X sea más joven que el que haya nacido en Noviembre del mismo año?

Si extrapolamos tu lógica al ámbito de años, afirmas que una persona nacida en 2002 es más joven que una persona nacida en 1998... y creo que no es así.

Última edición por tonigomila1988; 08/05/2018 a las 00:23
  #13 (permalink)  
Antiguo 08/05/2018, 07:23
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: CONSULTA MySQL: CUAL ES EL ALUMNO MAS JOVEn ?

Cita:
Iniciado por tonigomila1988 Ver Mensaje
Hola Libras, dime que es una broma lo que has escrito... Porque me costaría mucho asimilar que lo dices en serio y convencido. ¿Como crees posible que una persona que haya nacido en Marzo del año X sea más joven que el que haya nacido en Noviembre del mismo año?

Si extrapolamos tu lógica al ámbito de años, afirmas que una persona nacida en 2002 es más joven que una persona nacida en 1998... y creo que no es así.
Mea culpa, se me traslaparon los cables jejejejej
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me

Etiquetas: menor, sql, valor
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:45.