配置单元中的sql分组/窗口

hlswsv35  于 2021-05-27  发布在  Hadoop
关注(0)|答案(1)|浏览(399)

在下图中,第一个是有问题的表(提供的脚本),第二个是预期的输出。在c列中,我们有不同的项目,如t1、t2、t3,记录将分组提供,t1记录,然后t2或t3。这些之间不应该有任何差距,t1将开始和结束,然后只有t2项目可以出现。但如果t1在其他项目之后再次出现,我想换个Angular 考虑。在hive/spark中实现结果的选项是什么?
我尝试在一列中使用rank,然后在其他列中使用next value,并尝试运行一些比较,但没有帮助。
有什么指示吗

CREATE TABLE TEST_A (A STRING, B STRING, C STRING);

INSERT INTO TEST_A (A, B, C) VALUES ('a','1-Jan','T1'), ('a','2-Jan','T1'),('a','3-Jan','T2'),('a','4-Jan','T3') ,('a','5-Jan','T1'),('a','6-Jan','T1')
brqmpdu1

brqmpdu11#

这是一个缺口和岛屿问题。我将提议把相邻行的每个“岛”放在一个单独的行中。
一种方法——在本例中有效——是使用行号的差异:

select a, c, min(b), max(b)
from (select t.*,
             row_number() over (partition by a order by b) as seqnum,
             row_number() over (partition by a, c order by b) as seqnum_2
      from t
     ) t
group by a, c, (seqnum - seqnum_2);

如果你真的想的话,你可以把它分成多列。然而,我认为这只是混淆了问题,因为你可能不知道有多少组为一个给定的 a / c 组合。

相关问题