sql—根据特定事件的发生情况复制常量输出

zf2sa74q  于 2021-06-26  发布在  Hive
关注(0)|答案(1)|浏览(259)

我有一个包含事件的表(比如x,y,z是随机事件,a,b是我想要跟踪的事件)。如果我找到事件a,我想在当前行和后续行上输出1,如果我找到b,我想在当前行和后续行上输出-1,在我找到任何一个(a或b)之前,我想输出0。如何使用hive(sql)实现这一点?

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

我知道这可以通过使用连接来实现,但我正在寻找一个更优雅的解决方案(可能使用窗口函数-我尝试过dense\u rank()和row\u count(),但没有成功)

nzrxty8p

nzrxty8p1#

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

  1. select event,
  2. (case first_value(case when event in ('A', 'B') then event end, true) over
  3. (order by ordercol desc)
  4. when 'A' then -1
  5. when 'B' then 1
  6. else 0
  7. end)
  8. from e;

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

相关问题