如何在where子句中使用多行


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中,可以使用相关的子查询来获取下一个值。

相关内容

  • 没有找到相关文章

最新更新