Если линейная интерполяция является желаемым результатом, то следующий чрезвычайно уродливый, глупый и, вероятно, медленный запрос может привести к такому результату.Я сократил имена полей до t
и dc
.Я говорю «может», потому что с этим запросом огромное предостережение . Как написано, предполагается, что значение lower_capacity всегда увеличивается при повышении температуры (я понятия не имею, правда это или нет).select max(dc) from test where t <= 166
является одной частью, которая основана на этом предположении.Это также предполагает, что поля являются значениями с плавающей запятой (в противном случае будет выполняться целочисленная математика, как написано).
Ох ... и предостережение # 3.Это также может привести к сбою, если указанная температура будет меньше или больше, чем все значения температуры в таблице.
select (select max(dc) from test where t <= 166) +
(166 - (select max(t) from test where t <= 166)) *
((select min(dc) from test where t >= 166) -
(select max(dc) from test where t <= 166)) /
((select min(t) from test where t >= 166) -
(select max(t) from test where t <= 166))
Возможно, было бы более целесообразно реализовать это как хранимую процедуру и просто выполнить отдельный SELECT.заявления и вычислить результат линейной интерполяции из этого.Было бы намного легче читать и почти наверняка более эффективно.