我需要从此表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/

10-16 01:53