• 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