在case语句中在Spark SQL中使用滞后

时间:2019-01-18 08:55:20

标签: apache-spark apache-spark-sql

我有一个如下表

enter image description here

我想基于每个seq_group组中stay的值在右侧添加一个Item列。

enter image description here

对于每个项组,seq_group以0开头,而当seq_group > 8600设置为上一行seq_group + 1时,else子句将是上一行seq_group为设置。

我已经在spark sql中实现了这一点,如下所示。

select 
Item,
Stay,
case when Stay > 8600
then lag(seq_group,1) over (partition by Item order by ts) + 1
else lag(seq_group,1) over (partition by Item order by ts)
end as seq_group
from tableA

当前正在获得如下结果

enter image description here

任何解决此问题的指针都将提供真正的帮助

1 个答案:

答案 0 :(得分:2)

这可以通过累加来实现。

select Item,
       Stay,
       sum(case when Stay > 8600 then 1 else 0 end) over(partition by item order by ts) as seq_group
from tableA