-- Test data declare @T table (ProjectNumber int, DateChanged datetime, Value int) insert into @T select 1, '2001-01-01', 1 union all select 1, '2001-01-02', 1 union all select 1, '2001-01-03', 3 union all select 1, '2001-01-04', 3 union all select 1, '2001-01-05', 4 union all select 2, '2001-01-01', 1 union all select 2, '2001-01-02', 2 -- Get CurrentValue and PreviousValue with a Changed column ;with cte as ( select *, row_number() over(partition by ProjectNumber order by DateChanged) as rn from @T ) select C.ProjectNumber, C.Value as CurrentValue, P.Value as PreviousValue, case C.Value when P.Value then 0 else 1 end as Changed from cte as C inner join cte as P on C.ProjectNumber = P.ProjectNumber and C.rn = P.rn + 1 -- Count the number of changes per project ;with cte as ( select *, row_number() over(partition by ProjectNumber order by DateChanged) as rn from @T ) select C.ProjectNumber, sum(case C.Value when P.Value then 0 else 1 end) as ChangeCount from cte as C inner join cte as P on C.ProjectNumber = P.ProjectNumber and C.rn = P.rn + 1 group by C.ProjectNumber
source share