Je ferais quelque chose comme ça :
;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
Ou peut-être que ce serait x2.rn - 1. Vous devrez voir. En tout cas, vous voyez l'idée. Une fois que vous avez joint le tableau sur lui-même, vous pouvez filtrer, regrouper, trier, etc. pour obtenir ce dont vous avez besoin.