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

Problemi con ROW_NUMBER() OVER (PARTITION BY ...)

Farei qualcosa del genere:

;WITH x 
 AS (SELECT *, 
            Row_number() 
              OVER( 
                partition BY employeeid 
                ORDER BY datestart) rn 
     FROM   employeehistory) 
SELECT * 
FROM   x x1 
   LEFT OUTER JOIN x x2 
                ON x1.rn = x2.rn + 1 

O forse sarebbe x2.rn - 1. Dovrai vedere. In ogni caso, hai un'idea. Dopo aver unito la tabella su se stessa, puoi filtrare, raggruppare, ordinare, ecc. per ottenere ciò di cui hai bisogno.