Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Seleziona gli ultimi record dalla tabella utilizzando il raggruppamento per

Supponendo che le date di inizio e fine saranno sempre i valori più alti, allora devi eliminare alcune delle colonne da GROUP BY (avendo tutte le colonne nel GROUP BY è un po' come usare DISTINCT ) e utilizzare una funzione di aggregazione nell'altra colonna:

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

In caso contrario, puoi utilizzare un 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;