sql >> Base de Datos >  >> RDS >> Sqlserver

Seleccione los últimos registros de la tabla usando agrupar por

Asumiendo que las fechas de inicio y finalización siempre serán los valores más altos, entonces debe eliminar algunas de las columnas del GROUP BY (teniendo todas las columnas en el GROUP BY es como usar DISTINCT ) y use una función agregada en la otra columna:

SELECT UserId,
       MAX(StartDate) AS StartDate,
       MAX(EndDate) AS EndDate
FROM usersworktime
GROUP BY UserId;

De lo contrario, si ese no es el caso, puede usar un CTE y ROW_NUMBER :

WITH CTE AS(
    SELECT UserID,
           StartDate,
           EndDate,
           ROW_NUMBER() OVER (PARTITION BY UserID ORDER BY UsersWordTimeID DESC) AS RN
    FROM usersworktime)
SELECT UserID,
       StartDate,
       EndDate
FROM CTE
WHERE RN = 1;