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 ClaimStatuswhere cast(StatusDate as date) <= @StatusDate)select * from BaseData where rn = 1 and StatusCode = @StatusCode;drop table ClaimStatus;