Presto: как заполнить пробел и скопировать значение из предыдущих строк - PullRequest
0 голосов
/ 25 февраля 2020

У меня есть таблица с 2 строками:

  Percent   Value  
 --------- ------- 
    99.95     230  
    99.92     130  
    99.05      94  

Я хочу изменить это так, чтобы при наличии пробелов в столбце процентов (например, 99,94, 99,93, 99,91 ...) я хотел создайте эту строку со значением из предыдущей строки. так, например, 99,94 и 99,93 будут иметь значение 130, а 99,91 будет иметь значение 94.

Для оконной функции необходимо знать фиксированное смещение, а также я не думаю, что могу использовать ее для заполнения нового набора таблиц больше # строк.

Я думаю, что могу заставить его работать, создав таблицу числовых последовательностей и перекрестное соединение с этой таблицей, однако я не знаю, как сгенерировать фиктивный CTE с числовой последовательностью от 00.00 до 100,00 с шагом 0,01.

любая помощь будет оценена

1 Ответ

0 голосов
/ 26 февраля 2020

Как вы предложили в своем вопросе, вы можете сделать это с помощью таблицы последовательности (отменив вывод функции sequence) и оконной функции lag, например: это:

WITH data(p, v) AS (VALUES
    (99.95, 230),
    (99.92, 130),
    (99.05,  94)
),
sequence(p) AS (
    SELECT x/100.00 FROM unnest(sequence(1, 10000)) t(x)
)
SELECT
   sequence.p,
   coalesce(v, lag(v) IGNORE NULLS OVER (ORDER BY sequence.p))
FROM data RIGHT JOIN sequence ON data.p = sequence.p
...