我需要从此表1创建一个表2,尝试更新下表:
TABLE1:
ID Rank Event
123456 1 178
123456 2
123456 3
123456 4 155
123456 5
123456 6 192
123456 7
356589 1 165
356589 2
356589 3
356589 4 166
565984 1 1025
565984 2
987456 1 85
987456 2
987456 3
987456 4 22
987456 5
987456 6
试图根据上一个值填充“Event”列(如在Excel中的Ctrl+D)
TABLE2:
ID Rank Event
123456 1 178
123456 2 178
123456 3 178
123456 4 155
123456 5 155
123456 6 192
123456 7 192
356589 1 165
356589 2 165
356589 3 165
356589 4 166
565984 1 1025
565984 2 1025
987456 1 85
987456 2 85
987456 3 85
987456 4 22
987456 5 22
987456 6 22
问题是事件不遵循顺序,计数(ID,Rank)也不是常量。
我不能尝试使用基于变量的函数,因为它有数百万条记录,也不能使用'update'作为它的Hawq。
有什么建议吗?
谢谢!
最佳答案
您可以使用FIRST_VALUE
:
SELECT ID, RANK,
FIRST_VALUE(Event) OVER(PARTITION BY ID ORDER BY Rank) AS Event
FROM tab;
编辑:
道歉!每个ID有多个事件代码。
您可以使用其他分组来处理它:
WITH cte AS (
SELECT ID, RANK, EVENT,
SUM(CASE WHEN event IS NULL THEN 0 ELSE 1 END)
OVER(PARTITION BY ID ORDER BY RANK) AS grp
FROM t
)
SELECT ID, RANK,
FIRST_VALUE(Event) OVER(PARTITION BY ID, grp ORDER BY Rank) AS Event
FROM cte;
Rextester Demo
关于sql - HAWQ PostgreSQL-根据上一行增加行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51865032/