窗口函数/聚合函数/中断窗口

时间:2017-09-14 10:08:52

标签: sql postgresql

我的桌子看起来像这样(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排序。

2 个答案:

答案 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);