It does depend a little on whether you want just the first change per claim key, or all changes. The following code demonstrates returning all changes using a self-join:
-- Demo table structure
DECLARE @Example
AS TABLE
(
ClaimKey integer NOT NULL,
SequenceNumber tinyint NOT NULL,
SomeFlag bit NOT NULL,
PRIMARY KEY (ClaimKey, SequenceNumber)
);
-- Sample data
INSERT @Example
(ClaimKey, SequenceNumber, SomeFlag)
VALUES
(1002343, CONVERT(tinyint, 1), CONVERT(bit, 'true')),
(1002343, CONVERT(tinyint, 2), CONVERT(bit, 'false')),
(1002343, CONVERT(tinyint, 3), CONVERT(bit, 'false')),
(1008976, CONVERT(tinyint, 1), CONVERT(bit, 'true')),
(1008976, CONVERT(tinyint, 2), CONVERT(bit, 'true')),
(1008976, CONVERT(tinyint, 3), CONVERT(bit, 'true')),
(1008976, CONVERT(tinyint, 4), CONVERT(bit, 'false'));
-- Self-join
SELECT
ThisRow.ClaimKey,
ThisRow.SequenceNumber,
ThisFlag = ThisRow.SomeFlag,
PreviousFlag = Previous.SomeFlag
FROM @Example AS ThisRow
JOIN @Example AS Previous ON
Previous.ClaimKey = ThisRow.ClaimKey
AND Previous.SequenceNumber = ThisRow.SequenceNumber - CONVERT(tinyint, 1)
WHERE
ThisRow.SomeFlag <> Previous.SomeFlag
Paul White
SQLPerformance.com
SQLkiwi blog
@SQL_Kiwi