Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Selecione os últimos registros da tabela usando group by


Supondo que as datas de início e término sempre serão os valores mais altos, então você precisa remover algumas das colunas do GROUP BY (tendo todas as colunas no GROUP BY é como usar DISTINCT ) e use uma função agregada na outra coluna:
SELECT UserId,
       MAX(StartDate) AS StartDate,
       MAX(EndDate) AS EndDate
FROM usersworktime
GROUP BY UserId;

Caso contrário, se não for esse o caso, você pode usar um CTE e 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;