Ссылка на предыдущие строки (отставание 4) - PullRequest
0 голосов
/ 13 мая 2018

У меня есть следующие примеры данных, содержащие 4 столбца (qtrs, y, c1372, c5244), которые являются квартальными данными:

enter image description here

Я хотел бы преобразовать столбцы c1372 и c5244 в годичные значения роста существующих значений. Это требует деления текущей строки на текущую строку / текущую задержку строки 4 -1.

update temp_09.Y_PZZA       
set C1372 = C1372 / LAG(C1372,4) - 1, 
C5244 = C5244 / LAG(C5244,4) - 1, 

Однако вышеприведенное решение не работает. Я получаю эту ошибку:

[42803] ERROR: cannot use aggregate function in UPDATE

Также я не уверен, является ли функция задержки самым простым или наиболее надежным решением. Также имейте в виду, что первые 4 строки не могут ссылаться на более ранние строки. Хорошо, если эти первые 4 значения строки не изменятся.

1 Ответ

0 голосов
/ 13 мая 2018

Я ожидаю запрос update с from, что-то вроде этого:

update temp_09.Y_PZZA t
    set c1372 = tt.new1372,
        C5244 = tt.new_C5244
    from (select t.*,
                 C1372 / LAG(C1372, 4) over (order by qtrs)  - 1 as new_c1372,
                 C5244 / LAG(C5244, 4) over (order by qtrs) - 1 as new_C5244 
          from temp_09.Y_PZZA t
         ) tt
     where tt.qtrs = t.qtrs;

Я бы не рекомендовал перезаписывать текущие значения. Похоже, они что-то значат. Вместо этого просто добавьте еще один столбец. На самом деле, вы можете делать то, что вы хотите с видом.

Я подозреваю, что у вас есть другие ошибки в вашем запросе. Ваша версия должна возвращать ошибку, похожую на эту:

42809: задержка оконной функции требует предложения OVER

В вашем фрагменте кода нет функций агрегирования.

Если это так, я бы порекомендовал вам задать другой вопрос.

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