Первый год деградации имеет коэффициент 0,995, второй год 0,995 * 0,995 и др. c. Вы можете разбить задачу на две части:
- , указав группы строк с одинаковым уровнем ухудшения (столбец
g
ниже) и - умножить производственные данные на предварительно вычисленный коэффициент.
Запрос:
#standardSql
with sample as (
select timestamp '2020-01-01 00:00:00' as t, 100 as d union all
select timestamp '2020-08-01 00:00:00', 100 union all
select timestamp '2021-01-01 00:00:00', 100 union all
select timestamp '2021-07-31 23:00:00', 100 union all
select timestamp '2021-08-01 00:00:00', 100 union all
select timestamp '2022-01-01 00:00:00', 100 union all
select timestamp '2022-08-01 00:00:00', 100
), partial_result as (
select t,d, div(greatest(date_diff(cast(t as date), cast('2020-08-01' as date), month),0),12) as g from sample
)
select t,d, d*pow(0.995,g) as newd
from partial_result
newd
можно использовать в операторе обновления.
Обратите внимание, если вы хотите округлить значения на n-м уровне и вычислить n + Значения 1-го уровня из округленных значений на предыдущем уровне этот подход не применим.