CREATE TABLE #temp ( id INT, fromdate DATE ) INSERT INTO #temp VALUES (1, '20100111'), (1, '20110205'), (1, '20120101'); WITH cte AS (SELECT id, fromdate, Row_number() OVER ( partition BY id ORDER BY fromdate ASC) rownum FROM #temp) SELECT cte.id, cte.fromdate, Dateadd(d, -1, cte2.fromdate) FROM cte LEFT JOIN cte cte2 ON cte.rownum = cte2.rownum - 1 DROP TABLE #temp