2017-04-12 65 views
0

说我有下表。如果我的连接表与日期和货币不匹配,我如何获取以前的最新值?在空DKK值,我希望它拿起3.请注意,日期不是每天都存在,因为我没有在周末加载表。用最新值替换空值

Select 
    PositionDate, 
    Currency, 
    T2.Value, 
    isnull(t2.value, ?) 
From t1 
left join t2 
on t1.currency = t2.Currency 
and t1.PositionDate = t2.PositionDate 

PositionDate Currency  Value 
2017-04-11  SEK    1 
2017-04-11  DKK    NULL 
2017-04-11  EUR    7 
2017-04-10  SEK    4 
2017-04-10  DKK    3 
2017-04-10  EUR    5 
2017-04-07  SEK    4 
2017-04-07  DKK    3 
2017-04-07  EUR    5 

回答

0

这会为你的工作的情况下,我认为:

SELECT 
    t1.PositionDate, 
    t1.Currency, 
    COALESCE(t1.Value,t2.value) AS Value 
FROM t1 
LEFT join (SELECT MAX(PositionDate) AS PositionDate,Currency FROM t2 WHERE PositionDate < t1.PositionDate GROUP BY Currency) tjoin 
LEFT join t2 on tjoin.currency = t2.Currency and tjoin.PositionDate = t2.PositionDate 
0

您可以通过使用CTE和案例条件实现它。

With cte as 
(
    Select 
     PositionDate, 
     Currency, 
     T2.Value, 
    From t1 
    left join t2 
    on t1.currency = t2.Currency 
    and t1.PositionDate = t2.PositionDate 
     and t1.PositionDate = t2.PositionDate 
) 
select PositionDate, Currency, Value, 
    CASE WHEN ISNULL(value,'')='' THEN 
    (Select top 1 from cte cin where cin.currency=cout.currency order by CONVERT(Date,PositionDate) desc) 
    ELSE 
    Value 
    END as Value2 
    From cte cout