在下图中,第一个是有问题的表(提供的脚本),第二个是预期的输出。
在C列中,我们有不同的项目,例如T1,T2,T3,这些记录将按组显示,T1记录然后是T2或T3。两者之间不应有任何间隙,T1将开始和结束,然后只有T2项可以出现。但是如果T1在其他项目之后重新出现,我想换个 Angular 考虑。在 hive / Spark 中获得结果的选项有哪些?
我尝试在一列中使用等级,然后在其他列中使用下一个值,并尝试进行一些比较,但这没有帮助。
任何指针,请
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')
最佳答案
这是一个空白问题。我将建议将相邻行的每个“岛”放入单独的行中。
一种方法(在这种情况下有效)是使用行号的不同之处:
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
组合有多少个组。
关于sql - hive 中的分组/窗口化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59871799/