Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Wählen Sie die letzten Datensätze aus der Tabelle mit Gruppieren nach aus

Vorausgesetzt dass die Start- und Enddaten immer die höchsten Werte sind, dann müssen Sie einige der Spalten aus GROUP BY löschen (mit allen Spalten in GROUP BY ist so etwas wie die Verwendung von DISTINCT ) und verwenden Sie eine Aggregatfunktion für die andere Spalte:

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

Andernfalls, wenn dies nicht der Fall ist, können Sie einen CTE und ROW_NUMBER verwenden :

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;