declare @T table(Person nvarchar(20), [Day] date)
insert into @T values
('John', '2011-05-23'),
('John', '2011-05-24'),
('John', '2011-05-25'),
('John', '2011-05-27'),
('John', '2011-05-28'),
('John', '2011-05-29'),
('Anna', '2011-05-02'),
('Anna', '2011-05-03'),
('Anna', '2011-05-06')
;WITH cte AS
(
SELECT *,
DATEDIFF(DAY,0,[Day])-
ROW_NUMBER() OVER (PARTITION BY Person ORDER BY [Day]) AS Grp
FROM @T
)
SELECT Person,
MIN([Day]) AS DateFrom,
MAX([Day]) AS DateTo
FROM cte
GROUP BY Person, Grp