Agrupar registros, buscar la fecha mayor de cada grupo y devolver toda la fila MySQL

De MySQL, tengo un problema que no puedo resolver por más vueltas que le doy, quiero administrar los cambios de área del personal de una empresa, para eso hice una tabla en MySQL con los campos numempleado, areanueva, fechacambio, el objetivo es hacer una sola consulta y obtener todos los empleados con su cambio más reciente, para ello basándose en la columna fechacambio.

Hay alguna forma de crear una lista de todos los números de empleado, ¿y qué cada empleado tenga su ultima área y su ultima fecha cambio?

Lo intenté con la función máx y group, pero lo que hace es agrupar los números de empleados y ponerme enfrente de cada numero la fecha máxima, pero no sé como hacer que también obtenga el área correspondiente a la ultima fecha.

Respuesta

select num_empe, Ultima_Fecha, Ultima_Area from nombredelatabla order by Ultima_Fecha limit 1

Perdón amigo no había leído bien

select num_empe, Ultima_Fecha, Ultima_Area from nombredelatabla group by num_empe order by Ultima_Fecha desc

3 respuestas más de otros expertos

Respuesta
4

Con esto sale si o si :) tienes que usar INNER JOIN

SELECT t1.num_emp,t1.fecha,area_cambio FROM CAMBIOS as t1 INNER JOIN ( SELECT num_emp,MAX(fecha)as fecha FROM CAMBIOS
GROUP BY num_emp)as t2 ON t1.fecha = t2.fecha AND t1.num_emp = t2.num_emp
ORDER BY t1.num_emp;SELECT t1.num_emp,t1.fecha,area_cambio FROM CAMBIOS as t1 INNER JOIN ( SELECT num_emp,MAX(fecha)as fecha FROM CAMBIOS
GROUP BY num_emp)as t2 ON t1.fecha = t2.fecha AND t1.num_emp = t2.num_emp
ORDER BY t1.num_emp;

Disculpa se copio 2 veces, Ahora si:

SELECT t1.num_emp,t1.fecha,area_cambio FROM CAMBIOS as t1 INNER JOIN ( SELECT num_emp,MAX(fecha)as fecha FROM CAMBIOS GROUP BY num_emp)as t2 ON t1.fecha = t2.fecha AND t1.num_emp = t2.num_emp
ORDER BY t1.num_emp;

Respuesta
3

select * from tabla t1

where ultima_fecha=(select max(ultima_fecha) from tabla t2 where t1.num_emp=t2.num_emp);

Respuesta
1

SELECT num_emp, max(fecha_cambio) AS 'Fecha_Cambio', area_cambio AS 'Ultimo_Cambio' from TABLA GROUP BY num_emp ORDER BY fecha_cambio DESC;

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas