如何在sql服务器中进行插值?

时间:2019-03-21 11:18:42

标签: sql sql-server

我正在使用MS Visual Studio 2017 Windows窗体应用程序和SQL Server。例如,这是一个包含数据的表

ColumnA | ColumnB
1099    | 57
1209    | 58
1213    | 59
1227    | 60
1228    | 61

如果我们在ColumnA中传递确切值(即 1213 ),则可以从columnB数据中获取 59 。 现在,如何在ColumnA中通过 1210 进行插值:

(1210-1209)/(1213-1210) = (x-58)/(59-x) ==> x = 58.25

请帮助对此进行编码。预先感谢。

2 个答案:

答案 0 :(得分:2)

请尝试以下查询:

declare @tbl table (ColA int, ColB int);
insert into @tbl values
(1099 , 57),
(1209 , 58),
(1213 , 59),
(1227 , 60),
(1228 , 61);

declare @toInterpolate int = 1210;

select min(colB) + (@toInterpolate - min(ColA))*1.0/(max(colA) - min(colA))
from (
    select top 2 ROW_NUMBER() OVER (PARTITION BY CASE WHEN ColA > @Value THEN 1 ELSE 0 END ORDER BY ABS(ColA - @Value)) rn,
                 ColA,
                 ColB
    from @tbl
    order by rn
) a

注意:我假设ColumnB中的值正在增加。

答案 1 :(得分:0)

尝试这个

CREATE TABLE #YourTable (ColumnA float, ColumnB float)
INSERT #YourTable values
(1099 , 57),
(1209 , 58),
(1213 , 59),
(1227 , 60),
(1228 , 61);

DECLARE @Value float = 1221

select *, a.ColumnB + (@Value - a.ColumnA)/ISNULL(NULLIF((b.ColumnA - a.ColumnA),0),1)
from (
    select top 1 ColumnA,
                 ColumnB
    from #YourTable
    where ColumnA <= @Value
    order by ColumnA desc
) a
cross join (
    select top 1 ColumnA,
                 ColumnB
    from #YourTable
    where ColumnA >= @Value
) b

DROP TABLE #YourTable