Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Wybierz ostatnie rekordy z tabeli używając grupowania według

Zakładając że daty rozpoczęcia i zakończenia zawsze będą najwyższymi wartościami, musisz usunąć niektóre kolumny z GROUP BY (mający wszystkie kolumny w GROUP BY to trochę jak używanie DISTINCT ) i użyj funkcji agregującej w drugiej kolumnie:

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

W przeciwnym razie, jeśli tak nie jest, możesz użyć CTE i 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;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bezpośrednie wykonywanie SQL; brak kursora. błąd w kodzie Access 2007 VB

  2. Utwórz obiektową matrycę w SQL Server

  3. Przejrzyj swoje ustawienia sesji za pomocą SESSIONPROPERTY() w SQL Server

  4. Co robi program SQL Server z żądaniem przekroczenia limitu czasu?

  5. Odzyskaj bazę danych z trybu awaryjnego w SQL Server