根据特定事件的发生复制常量输出

  • 本文关键字:复制 常量 输出 事件 sql hive
  • 更新时间 :
  • 英文 :


我有一个包含事件的表(比如X,Y,Z是随机事件,A,B是我想跟踪的事件)。如果我找到事件 A,我想在当前和后续行上输出 1,如果我找到 B,我在当前和后续行上输出 -1,在找到其中任何行(A 或 B)之前,我输出 0。如何使用 Hive (SQL) 执行此操作?

event | output | ordercol
  X       0         1
  Y       0         2
  Z       0         3
  B      -1         4
  X      -1         5
  X      -1         6
  B      -1         7
  X      -1         8
  A       1         9
  X       1        10
  B      -1        11
  Z      -1        12

我知道这可以使用连接来完成,但我正在寻找一个更优雅的解决方案(也许使用窗口函数 - 我已经尝试了 dense_rank() 和 row_count

() 但没有成功)

根据本文档,您可以使用first_value()和一些附加逻辑:

select event,
       (case first_value(case when event in ('A', 'B') then event end, true) over
                      (order by ordercol desc)
             when 'A' then -1
             when 'B' then 1
             else 0
        end)
from e;

此功能在标准和其他数据库中称为IGNORE NULLS

最新更新