Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Sélectionnez les derniers enregistrements de la table en utilisant le groupe par

En supposant que les dates de début et de fin seront toujours les valeurs les plus élevées, vous devez supprimer certaines des colonnes du GROUP BY (ayant toutes les colonnes dans le GROUP BY est un peu comme utiliser DISTINCT ) et utilisez une fonction d'agrégation sur l'autre colonne :

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

Sinon, si ce n'est pas le cas, vous pouvez utiliser un CTE et 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;