, LAG, SQL Server 2008 R2:
;WITH CTE_RN AS (
SELECT cksum, id, ROW_NUMBER() OVER(ORDER BY id) AS rn
FROM Checksums
), CTE_LAG AS (
SELECT c1.cksum, c1.id, c1.rn,
(CASE WHEN c2.cksum IS NULL OR c1.cksum = c2.cksum THEN 0
ELSE 1
END) AS flag
FROM CTE_RN AS c1
LEFT JOIN CTE_RN AS c2 ON c1.rn = c2.rn+1
)
SELECT cksum, id, (SELECT SUM(flag)
FROM CTE_LAG AS t2
WHERE t2.rn <= t1.rn) + 1 AS [rank]
FROM CTE_LAG AS t1
CTE_LAG ( OP):
cksum id rn flag
-2162514679 204 1 0
-2162514679 207 2 0
-2162514679 215 3 0
-2162514679 218 4 0
-2162514679 221 5 0
-2160286363 257 6 1
-2160286363 260 7 0
-2160286363 332 8 0
-2162514679 335 9 1
-2162514679 338 10 0
-2126731931 348 11 1
-2126731931 387 12 0
flag 1, cksum cksum, flag 0.
rank - flag.