none
Obtener un solo registro por empleado, ordenado por fecha reciente RRS feed

  • Pregunta

  • Buen dia a todos, deseo obtener un solo registro mas reciente por empleado, ordenado por la fecha mas reciente.

    Tengo la siguiente consulta:

    SELECT NumEmpleado, CONVERT(VARCHAR, LastUpdate, 11) AS DateRecent
    FROM updatesItem
    ORDER BY LastUpdate DESC, NumEmpleado ASC


    Lo que obtengo de salida es lo siguiente:

    1535	10/29/2019
    1058	07/02/2019
    1496	01/28/2019
    1576	12/13/2018
    1058	09/14/2018
    1408	07/02/2018
    1408	04/19/2018
    1496	09/11/2017
    1496	08/17/2017
    1058	07/10/2017
    1583	06/09/2017
    1058	06/07/2017
    1058	05/26/2017

    Lo que deseo obtener es lo siguiente:

    1535	19/10/29
    1058	19/07/02
    1496	19/01/28
    1576	18/12/13
    1408	18/07/02
    Obtener solamente un registro por empleado y su fecha mas reciente, Pueden guiarme sobre como puedo lograrlo?

    Uso sql server 2012


    • Editado Pollokullos miércoles, 30 de octubre de 2019 19:29
    miércoles, 30 de octubre de 2019 19:09

Respuestas

  • Hola:

    Entonces solo tienes que añadir partition by

    WITH CTE
         AS (SELECT ROW_NUMBER() OVER(PARTITION by numempleado
                    ORDER BY LastUpdate DESC, 
                             NumEmpleado ASC) AS ROW, 
                    NumEmpleado, 
                    CONVERT(VARCHAR, LastUpdate, 11) AS DateRecent
             FROM updatesItem)
         SELECT CTE.[ROW], 
                CTE.NumEmpleado, 
                CTE.DateRecent
         FROM CTE
         WHERE ROW = 1;

    • Propuesto como respuesta Pablo RubioModerator miércoles, 30 de octubre de 2019 19:50
    • Marcado como respuesta Pollokullos miércoles, 30 de octubre de 2019 20:06
    miércoles, 30 de octubre de 2019 19:48

Todas las respuestas

  • Hola Pollokullos:

    Puedes utilizar row_number y obtener solo la primera fila

    WITH CTE
         AS (SELECT ROW_NUMBER() OVER(
                    ORDER BY LastUpdate DESC, 
                             NumEmpleado ASC) AS ROW, 
                    NumEmpleado, 
                    CONVERT(VARCHAR, LastUpdate, 11) AS DateRecent
             FROM updatesItem)
         SELECT CTE.[ROW], 
                CTE.NumEmpleado, 
                CTE.DateRecent
         FROM CTE
         WHERE ROW = 1;

    miércoles, 30 de octubre de 2019 19:18
  • Creo q no formule bien mi pregunta, si debo traer un registro, pero POR EMPLEADO, es decir tendria q retornar lo siguiente:

    1535	19/10/29
    1058	19/07/02
    1496	19/01/28
    1576	18/12/13
    1408	18/07/02

    miércoles, 30 de octubre de 2019 19:29
  • Hola:

    Entonces solo tienes que añadir partition by

    WITH CTE
         AS (SELECT ROW_NUMBER() OVER(PARTITION by numempleado
                    ORDER BY LastUpdate DESC, 
                             NumEmpleado ASC) AS ROW, 
                    NumEmpleado, 
                    CONVERT(VARCHAR, LastUpdate, 11) AS DateRecent
             FROM updatesItem)
         SELECT CTE.[ROW], 
                CTE.NumEmpleado, 
                CTE.DateRecent
         FROM CTE
         WHERE ROW = 1;

    • Propuesto como respuesta Pablo RubioModerator miércoles, 30 de octubre de 2019 19:50
    • Marcado como respuesta Pollokullos miércoles, 30 de octubre de 2019 20:06
    miércoles, 30 de octubre de 2019 19:48
  • Muchas Gracias.
    miércoles, 30 de octubre de 2019 20:07