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

Vælg sidste poster fra tabel ved hjælp af gruppe efter

Forudsat at start- og slutdatoerne altid vil være de højeste værdier, så skal du slette nogle af kolonnerne fra GROUP BY (med alle kolonnerne i GROUP BY er lidt som at bruge DISTINCT ) og brug en aggregeret funktion i den anden kolonne:

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

Ellers, hvis det ikke er tilfældet, kan du bruge en CTE og 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. beregne timer baseret på arbejdstimer i Oracle SQL

  2. Datastruktur for forskellige turnerings-/konkurrencetyper (liga, stige, enkelt/dobbelt eliminering osv.)

  3. Præstationsproblemer:Det første møde

  4. Sådan indstilles en værdi til NULL, når du bruger Zend_Db