none
HELP !! Agrupar fila y mostrar el registro mas reciente . Debe funcionar para MYSQL RRS feed

  • Pregunta

  • Buenas tardes, Necesito hacer una consulta que me regrese el cargo actual de todos los empleado guardados en mi base de datos. He intentado varias cosas y aun no he logrado.

    mis tablas son las siguientes : empleado, historialcargo, cargo.

    en la tabla historialCargo esta almacenado lo siguiente: 

    id id_e id_c

    1  1    1

    2  1    2

    3  1    3

    4  21   2

    5  1     13

    Necesito agrupar por id_empleado y mostrar el ultimo id_cargo de cada empleado para que quede algo asi:

    id id_e id_c

    4  21   2

    5  1     13


    • Editado Roxnny domingo, 13 de octubre de 2019 22:15 No especifique la plataforma
    domingo, 13 de octubre de 2019 21:23

Respuestas

Todas las respuestas

  • Hola Roxny:

    Puedes utilizar una tabla derivada, para obtener el máximo id y luego cruzarla con tu origen de datos.

    declare @table table (id int, id_e int, id_C int)
    insert into @table 
    values
    (1,1,1),
    (2,1,2),
    (3,1,3),
    (4,21,2),
    (5,1,13);

    En la variable de tabla @table esta tu origen de datos.

    select interior.* , t.id_C 
        from (
    	   select MAX(id) as id, id_e
    	   from @table 
    	   group by id_e
    	   ) as interior 
       inner join @table t on interior.id = t.id

    Salida

    Tablas derivadas

    https://javifer2.blogspot.com/search/label/Tabla%20derivadas

    Group by

    https://javifer2.blogspot.com/search/label/group%20by

    • Marcado como respuesta Roxnny lunes, 14 de octubre de 2019 0:03
    domingo, 13 de octubre de 2019 21:55
  • Deleted
    domingo, 13 de octubre de 2019 22:04
  • Disculpe, es que soy nuevo es esta plataforma, eso tambien puede aplicar si mi gestor de base de datos es mysql ?
    domingo, 13 de octubre de 2019 22:10
  • Si, la tabla historialCargo tiene la fecha 
    domingo, 13 de octubre de 2019 22:26
  • Deleted
    domingo, 13 de octubre de 2019 22:27
  • Buenas tardes, Necesito hacer una consulta que me regrese el cargo actual de todos los empleado guardados en mi base de datos. He intentado varias cosas y aun no he logrado.

    mis tablas son las siguientes : empleado, historialcargo, cargo.

    en la tabla historialCargo esta almacenado lo siguiente: 

    id id_e id_c

    1  1    1

    2  1    2

    3  1    3

    4  21   2

    5  1     13

    Necesito agrupar por id_empleado y mostrar el ultimo id_cargo de cada empleado para que quede algo asi:

    id id_e id_c

    4  21   2

    5  1     13


    Muchas gracias a los que respondieron a mi pregunta, me ayudaron mucho.

    Asi quedo la query después de leer sus sugerencias:
    SELECT  i.id
           ,i.id_empleado
           ,t.id_cargo
           ,t.cargo 
           ,i.fechaCambio
    FROM 
    (
    	SELECT  MAX(hc.id) AS id
    	       ,hc.id_empleado
    	       ,fechaCambio
    	FROM 
    	(
    		SELECT  *
    		FROM `historialcargo`
    	) AS hc
    	GROUP BY  hc.id_empleado
    ) AS i
    INNER JOIN 
    (
    	SELECT  c.cargo
    	       ,hc.*
    	FROM `historialcargo` AS hc
    	INNER JOIN `cargo` AS c
    	ON hc.id_cargo = c.id
    ) AS t
    ON i.id = t.id 

    lunes, 14 de octubre de 2019 0:02