Declare @Table1 table
(Date Datetime,Fund Varchar(10),Security Varchar(10),Actual_Weight float)
Insert into @Table1
Select '1/01/2012','FundA' ,'Cash',0.2 union all
Select '1/01/2012' ,'FundA' ,'MBS' ,0.8 union all
Select '1/01/2012' ,'FundB' ,'Cash' ,0.3 union all
Select '1/01/2012' ,'FundB' ,'MBS' ,0.7 union all
Select '2/01/2012' ,'FundA' ,'Cash' ,0.1 union all
Select '2/01/2012' ,'FundA' ,'MBS' ,0.9 union all
Select '2/01/2012' ,'FundB' ,'Cash' ,0.2 union all
Select '2/01/2012' ,'FundB' ,'MBS' ,0.8 union all
Select '3/01/2012' ,'FundA' ,'Cash' ,0.7 union all
Select '3/01/2012' ,'FundA' ,'MBS' ,0.3 union all
Select '3/01/2012' ,'FundB' ,'Cash' ,0.5 union all
Select '3/01/2012' ,'FundB' ,'MBS' ,0.5
Declare @Table2 table
(Date Datetime,Fund Varchar(10),Security Varchar(10),Target_Weight float)
Insert into @Table2
Select '1/01/2012','FundA' ,'Cash',0.5 union all
Select '1/01/2012' ,'FundA' ,'MBS' ,0.5 union all
Select '1/01/2012' ,'FundB' ,'Cash' ,0.7 union all
Select '1/01/2012' ,'FundB' ,'MBS' ,0.3 union all
Select '3/01/2012' ,'FundA' ,'Cash' ,0.6 union all
Select '3/01/2012' ,'FundA' ,'MBS' ,0.4 union all
Select '3/01/2012' ,'FundB' ,'Cash' ,0.1 union all
Select '3/01/2012' ,'FundB' ,'MBS' ,0.9
Select T1.Date,T1.Fund,T1.Security,T1.Actual_Weight,T2.Target_Weight
from @Table1 T1
OUTER APPLY
(
Select Top 1 a.Target_Weight
from @Table2 a
where a.fund = T1.fund
and a.security = T1.security
and a.date <= T1.date
order by a.date desc
)T2
Date Fund Security Actual_Weight Target_Weight
2012-01-01 00:00:00.000 FundA Cash 0.2 0.5
2012-01-01 00:00:00.000 FundA MBS 0.8 0.5
2012-01-01 00:00:00.000 FundB Cash 0.3 0.7
2012-01-01 00:00:00.000 FundB MBS 0.7 0.3
2012-02-01 00:00:00.000 FundA Cash 0.1 0.5
2012-02-01 00:00:00.000 FundA MBS 0.9 0.5
2012-02-01 00:00:00.000 FundB Cash 0.2 0.7
2012-02-01 00:00:00.000 FundB MBS 0.8 0.3
2012-03-01 00:00:00.000 FundA Cash 0.7 0.6
2012-03-01 00:00:00.000 FundA MBS 0.3 0.4
2012-03-01 00:00:00.000 FundB Cash 0.5 0.1
2012-03-01 00:00:00.000 FundB MBS 0.5 0.9