BigQuery - Умножение столбца с убывающим коэффициентом для скользящего года, начиная с указанной даты c - PullRequest
0 голосов
/ 04 февраля 2020

В моей таблице 2 столбца; Отметка времени (начиная с 2020-01-01 00:00:00, заканчивая 2050-12-31 23:00:00 для интервала 1 час) и Производственные данные за каждый час. Я хочу ухудшить эти производственные данные на 0,5% в годовом исчислении. Производственные данные за первый год не будут изменены. На втором году он начнет ухудшаться (умножается на одно и то же значение за весь год).

Если я хочу применить снижение производительности к рабочему столбцу, начиная с 2021-08-01 00:00:00, как я могу это сделать? Например, дата первого года будет включать период между 2021-08-01 00:00:00 и 2022-07-31 23:00:00, а производство будет умножено на 1. Во втором году (2022-08-01 00 : 00: 00 - 2023-07-31 23:00:00) производство будет увеличено на 0,995 ..

1 Ответ

1 голос
/ 04 февраля 2020

Первый год деградации имеет коэффициент 0,995, второй год 0,995 * 0,995 и др. c. Вы можете разбить задачу на две части:

  1. , указав группы строк с одинаковым уровнем ухудшения (столбец g ниже) и
  2. умножить производственные данные на предварительно вычисленный коэффициент.

Запрос:

#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-го уровня из округленных значений на предыдущем уровне этот подход не применим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...