我的桌子看起来像这样(Cols A-D):
A B C D E
----------------------------------------------------------
1 2011 2011-06-30 A 2013-06-30
1 2012 2012-06-30 A 2013-06-30
1 2013 2013-06-30 A 2013-06-30
1 2014 2015-06-30 B 2015-06-30
1 2015 9999-12-31 A 9999-12-31
2 2014 9999-12-31 C 9999-12-31
2 2015 9999-12-31 C 9999-12-31
2 2016 9999-12-31 C 9999-12-31
我尝试通过窗口函数基于A-D创建col E.我需要在不中断D(如果它改变下一个窗口应该开始)的情况下计算最大值(C),由A,B和C排序。
答案 0 :(得分:1)
您需要识别相邻的组。一种方法使用窗口函数的差异来识别组:
select t.*,
max(c) over (partition by a, seqnum_a - seqnum_ad) as e
from (select t.*,
row_number() over (partition by a order by b) as seqnum_a,
row_number() over (partition by a, d order by b) as seqnum_ad
from t
) t;
有点难以解释行数的差异是如何工作的。但是,如果您运行子查询并盯着结果,您可能会看到它是如何工作的。
答案 1 :(得分:0)
尝试以下查询以获取请求的结果
JavaSparkContext javaSparkContext = new JavaSparkContext(sparkConf);