• Something like this:

    CREATE TABLE ClaimStatus(

    ClaimID int NOT NULL,

    StatusDate datetime NOT NULL,

    StatusCode int NOT NULL);

    INSERT INTO ClaimStatus VALUES (7150,'2013-03-11 10:41:29.823',100);

    INSERT INTO ClaimStatus VALUES (7150,'2013-03-12 07:20:41.720',300);

    INSERT INTO ClaimStatus VALUES (7150,'2013-03-15 13:35:50.000',310);

    INSERT INTO ClaimStatus VALUES (7148,'2013-03-01 10:41:29.780',100);

    INSERT INTO ClaimStatus VALUES (7148,'2013-03-10 07:21:26.557',300);

    INSERT INTO ClaimStatus VALUES (7148,'2013-03-20 13:35:50.000',310);

    INSERT INTO ClaimStatus VALUES (7149,'2013-02-01 01:19:20.110',100);

    INSERT INTO ClaimStatus VALUES (7149,'2013-02-14 07:21:26.557',300);

    INSERT INTO ClaimStatus VALUES (7149,'2013-03-14 00:35:50.000',310);

    INSERT INTO ClaimStatus VALUES (7147,'2013-02-01 01:19:20.110',100);

    INSERT INTO ClaimStatus VALUES (7147,'2013-02-14 07:21:26.557',300);

    INSERT INTO ClaimStatus VALUES (7147,'2013-03-10 00:35:50.000',310);

    declare @StatusDate date = '20130314',

    @StatusCode int = 300;

    with BaseData as (

    select

    ClaimID,

    StatusDate,

    StatusCode,

    rn = row_number() over (partition by ClaimID order by StatusDate desc)

    from

    ClaimStatus

    where

    cast(StatusDate as date) <= @StatusDate

    )

    select * from BaseData where rn = 1 and StatusCode = @StatusCode;

    drop table ClaimStatus;