Presto:如何填补空白并从前几行复制值
Presto: how to fill in gap and copy value from previous rows
我有一个 table 有 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。
窗口函数需要知道固定的偏移量,而且我认为我不能用它来填充新的 table 组更多行。
我想我可以通过生成一个数字序列 table 并与此 table 交叉连接来使其工作,但是,我不知道如何生成一个带有数字序列的虚拟 CTE 00.00 到 100.00,增量为 0.01。
任何帮助将不胜感激
正如您在问题中所建议的那样,您可以使用序列 table 来完成(通过取消嵌套 sequence
function) and the lag
window 函数的输出,如下所示:
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
我有一个 table 有 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。
窗口函数需要知道固定的偏移量,而且我认为我不能用它来填充新的 table 组更多行。
我想我可以通过生成一个数字序列 table 并与此 table 交叉连接来使其工作,但是,我不知道如何生成一个带有数字序列的虚拟 CTE 00.00 到 100.00,增量为 0.01。
任何帮助将不胜感激
正如您在问题中所建议的那样,您可以使用序列 table 来完成(通过取消嵌套 sequence
function) and the lag
window 函数的输出,如下所示:
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