PostgresSQL(redshift)需要在同一列中填充基于空的非空值

问题描述 投票:0回答:1

希望有人可以帮助应对这一挑战。 (我尝试过研究和chatgpt但无济于事)。

我有以下数据集: enter image description here

基本上,我需要用 Sub_ID 填充黄色空值,直到它遇到下一个 sub_id,然后填充直到下一个,等等。 空订单仅根据日期排序起作用。 此外,需要按 Customer_ID 进行分组,因为完整数据集有更多(1500 万行),因此任何速度优化都将是一个奖励。

我尝试过 Lead / Lag / Lastvalue /coalesce 但我得到的最接近的结果只是在每个实际值之后填充第一个空值。

如果任何天才能够解决这个问题,那就太棒了,因为我被难住了。

postgresql
1个回答
0
投票

我终于解决了!已经尝试了几天,当我将其发布到这里时,我就弄清楚了...叹息..无论如何,这是将来其他人的答案。

SELECT
*, 
first_value(sub_id) OVER (
PARTITION BY value_partition 
ORDER BY date 
ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
) AS first_sub_id
FROM (
SELECT
*,
SUM(CASE WHEN sub_id IS NULL THEN 0 ELSE 1 END) OVER (
  ORDER BY date 
  ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
) AS value_partition
from table1 
ORDER BY date ASC
) AS q
ORDER BY date;
© www.soinside.com 2019 - 2024. All rights reserved.