我有一个返回持续时间值的选择。我想要做的是在查找表中查找此值并返回最接近此持续时间值的yield的值。
e.g
我的美元持续时间为0.20所以从下面的查找表中得出这个代码:
select fld1_val, mrkt_cap_wght from dw_iss_indx_cnstnt AS ai WITH (NOLOCK)
INNER JOIN dw_issue_dg AS i WITH (NOLOCK)
ON ai.indx_instr_id = i.instr_id
AND ai.as_of_dte > getdate()-2
INNER JOIN dw_issue_alt_id AS ia WITH (NOLOCK)
on ia.instr_id = ai.indx_instr_id
AND id_ctxt_typ = 'Bloomberg ID'
AND denom_curr_cde = 'USD'
返回:
fld1_val mrkt_cap_wght
0.08 5.0168
0.25 5.03
0.5 5.09
1 5.21
2 5.2
5 5.51
10 5.67
12 5.69
15 5.7
20 5.71
所以我要做的就是查找这个并且因为0.20最接近0.25我将返回5.03作为我的收益。
但是我不确定如何做到这一点,因为查找不是寻找完全匹配,只是最接近值。知道我怎么能这样做吗?
答案 0 :(得分:0)
我现在无法测试/验证这一点,但似乎您可以使用min
或顺序选择前1来对照给定值和表值之间的绝对差异。
答案 1 :(得分:0)
这样做的一种快捷方式:
SELECT fld1_val
FROM table
WHERE (abs(mrkt_cap_wght - 0.25)) = (SELECT MIN(abs(mrkt_cap_wght - 0.25)) FROM table);
我已经在另一张桌子上测试了它,它确实有效,但它确实感觉有点笨拙。
答案 2 :(得分:0)
DECLARE @Dur decimal(5,2)=0.20;
select TOP 1 fld1_val, mrkt_cap_wght from dw_iss_indx_cnstnt AS ai WITH (NOLOCK)
INNER JOIN dw_issue_dg AS i WITH (NOLOCK)
ON ai.indx_instr_id = i.instr_id
AND ai.as_of_dte > getdate()-2
INNER JOIN dw_issue_alt_id AS ia WITH (NOLOCK)
on ia.instr_id = ai.indx_instr_id
AND id_ctxt_typ = 'Bloomberg ID'
AND denom_curr_cde = 'USD'
ORDER BY ABS(@Dur-fld1_val)