我正在努力获得以下逻辑。 我有2张桌子。
表A
Request# ReqDate Amount Currency
-----------------------------------------------
REQ1234 2017-01-01 100000 INR
表B
ExDate Conversion FromCur ToCur
-----------------------------------------------------
2017-01-03 0.018 INR USD
2016-12-20 0.019 INR USD
2016-12-21 0.011 INR USD
2016-12-22 0.012 INR USD
2016-12-23 0.015 INR USD
2016-12-24 0.020 INR USD
2016-12-25 0.021 INR USD
在这里,我需要加入FromCur和Date才能获得相应的美元转换因子。
但是,如果ReqDate的因子不可用,请检查上一个日期,如果该日期之前不可用,请检查。
同样,我需要检查2016年12月25日之前的7天,并获取该系数。
如何执行此操作? 所以结果应该是
Req# Date Conversion Amount Currency ToCur USDAmt ExDate
-------------------------------------------------------------------------------
REQ1234 2017-01-01 0.021 100000 INR CAD 2100 2016-12-25
答案 0 :(得分:1)
一种方法使用相关的子查询:
select a.*,
(select b.conversion
from b
where b.fromcur = a.currency and b.date <= a.date
order by b.date desc
fetch first 1 row only
) as conversion
from a
答案 1 :(得分:0)
对于 SQL Server ,我建议使用Apply运算符,如果您可能需要返回NULL(如果找不到),请使用outer apply
select a.*,rate.conversion
from a
outer apply (
select top(1) b.conversion
from b
where b.fromcur = a.currency and b.date <= a.date
-- and b.date > dateadd(day,-7,a.date)
order by b.date desc
) as rate
请注意,如果您需要限制找回汇率的距离,请使用上面建议的where子句中的附加条件。
您可以在select子句中使用相关的子查询,但是我建议使用上面的方法。
select a.*
, (select top(1) b.conversion
from b
where b.fromcur = a.currency and b.date <= a.date
-- and b.date > dateadd(day,-7,a.date)
order by b.date desc
) as conversion
from a