TRAVEL | SIZE
0 | 0.41
2.5 | 0.45
5.0 | 0.50
7.5 | 0.54
10 | 0.58
我正在使用火鸟数据库。最终目标是根据给定的大小进行旅行。我面临的问题是,给定的大小是连续的。
例如,给定的大小为0.47。然后,由插值公式(0.47-0.45)*(5.0-2.5)/(0.5-0.45)+2.5 = 3.5
得到行程
实际上,在提取了给定大小的2行之后,我尝试在C#中进行计算。但我被卡住了,提取了两行。
我该如何解决这个问题。
我建议lead()
用于此目的:
select (case when 0.47 = size then travel
else travel + (next_travel - travel) * (0.47 - size) / (next_size - size)
end) as imputed_size
from (select t.*,
lead(size) over (order by size) as next_size,
lead(travel) over (order by size) as next_travel
from t
) t
where 0.47 >= size and
(0.47 < next_size or next_size is null);
在旧版本的Firebird中,可以使用相关的子查询来获取下一个值。