Как увеличить аргумент смещения LAG в пределах l oop? - PullRequest
0 голосов
/ 09 февраля 2020

Я хотел бы использовать функцию LAG() в al oop, где второй аргумент offset увеличивается с каждой итерацией, как показано ниже:

BEGIN

  DECLARE i INT64 DEFAULT 1;

  WHILE i < 6 DO

    SELECT
      col1_cat
      ,col2_ts
      ,col3_val
      ,LAG(col3_val, i) OVER(PARTITION BY col1_cat ORDER BY col2_ts DESC) AS col3_val_lag1
    FROM
      my_table;

    SET i = i + 1;

  END WHILE;

END;

К сожалению, документы и Ошибка, дайте понять, что

Аргумент 2 для LAG должен быть литералом или параметром запроса

Как мне выполнить sh эту задачу, избегая этой ошибки?

1 Ответ

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

Попробуйте ниже

BEGIN

  DECLARE i INT64 DEFAULT 1;

  WHILE i < 6 DO

    SELECT
      col1_cat
      ,col2_ts
      ,col3_val
      ,ARRAY_REVERSE(ARRAY_AGG(col3_val) OVER(PARTITION BY col1_cat ORDER BY col2_ts DESC))[SAFE_OFFSET(i)] AS col3_val_lag1 
    FROM
      my_table;

    SET i = i + 1;

  END WHILE;

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