Sql server 2008 tsql-匹配查找中最接近的数字
我有一个返回持续时间值的select。我想做的是在查找表中查找这个值,并返回一个最接近这个持续时间值的收益率值 e、 g 我的美元期限为0.20美元,因此从我的下表中可以看出,下表是根据本代码得出的:Sql server 2008 tsql-匹配查找中最接近的数字,sql-server-2008,tsql,lookup,Sql Server 2008,Tsql,Lookup,我有一个返回持续时间值的select。我想做的是在查找表中查找这个值,并返回一个最接近这个持续时间值的收益率值 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.inst
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作为我的收益率
但是,我不确定如何执行此操作,因为查找并不是寻找精确的匹配,而是最接近的值。知道我该怎么做吗?我现在无法测试/验证这一点,但您似乎可以使用
min
或一个顺序,根据给定值和表值之间的绝对差值选择前1 一种快速而肮脏的方法:
SELECT fld1_val
FROM table
WHERE (abs(mrkt_cap_wght - 0.25)) = (SELECT MIN(abs(mrkt_cap_wght - 0.25)) FROM table);
我在另一个表上测试过它,它确实有效,但无可否认它感觉有点笨拙。是否
选择top 1
和order by abs(col-value)
为您指出了正确的方向?谢谢,我将它放在一个临时表中,然后与我的工作表交叉应用,以输入我所需的数字。
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)