gpt4 book ai didi

sql - HAWQ PostgreSQL - 基于前一行的增量行

转载 作者:行者123 更新时间:2023-11-29 12:51:55 25 4
gpt4 key购买 nike

我需要从这个 table1 创建一个 table2 来尝试更新下表:

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

尝试根据之前的值填充“事件”列(如 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

问题是事件不遵循顺序并且 count(ID, Rank) 也不是常量。我不能尝试使用基于变量的函数,因为它有数百万条记录,也不能使用“更新”作为它的 Hawq。

有什么建议吗?欣赏!

最佳答案

您可以使用 FIRST_VALUE:

SELECT ID, RANK, 
FIRST_VALUE(Event) OVER(PARTITION BY ID ORDER BY Rank) AS Event
FROM tab;

编辑:

Apologies! Each ID has multiple Event codes.

你可以通过额外的分组来处理它:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com