蜂巢中的分组/窗口化

问题描述 投票:0回答:1

在下图中,第一个是有问题的表(提供的脚本),第二个是预期的输出。在C列中,我们有不同的项目,例如T1,T2,T3,这些记录将按组显示,T1记录然后是T2或T3。两者之间不应有任何间隙,T1将开始和结束,然后只有T2项可以出现。但是,如果T1在其他项目之后重新出现,我想换个角度考虑。在蜂巢/火花中获得结果的选项有哪些?

我尝试在第一列中使用等级,然后在其他列中使用下一个值,并尝试进行一些比较,但这没有帮助。

请使用任何指针

<code>enter image description here</code>

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')
sql hadoop hive hiveql pyspark-sql
1个回答
0
投票

这是一个空白问题。我将建议将相邻行的每个“岛”放入单独的行中。

在这种情况下有效的一种方法是使用行号的不同:

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组合有多少个组。

© www.soinside.com 2019 - 2024. All rights reserved.