There are many ways to find out gaps & range, but this standard gaps-and-island solution that I found on net is coolest one. Basic idea of this solution is to group by (value minus
row_number), since that is invariant within a consecutive sequence. The
start and end dates are just the MIN() and MAX() of the group.
The value could be int or date.
Hope it helps
The value could be int or date.
DECLARE @data TABLE (i INT) INSERT INTO @data VALUES (1) ,(2) ,(4) ,(5) ,(10) ,(11) ,(15) ,(16) ,(17) ,(18) ,(19) ,(20) ,(21); WITH tab AS ( SELECT i d ,ROW_NUMBER() OVER ( ORDER BY i ) r FROM @data ) SELECT min(d) ,max(d) FROM tab GROUP BY d - r
Output:
Hope it helps
No comments:
Post a Comment