我正在尝试在配置单元中编写一个查询,以返回具有年份范围的数据,如果这些数据是连续的年份以及间隔年份,如果这些年份之间存在间隔。
我正想弄清楚,但似乎找不到实现结果的逻辑。Hive逻辑是如何工作的。请帮忙。
输入
group_no year
1111 2003
1111 2004
1111 2005
1111 2008
1111 2010
1111 2011
1111 2012
2222 2015
3333 2014
3333 2015
3333 2017
3333 2019
4444 2010
4444 2012
输出:
group_no year
1111 [2003-2005,2008,2010-2012]
2222 [2015]
3333 [2014-2015,2017,2019]
4444 [2010,2012]
2条答案
按热度按时间k4ymrczo1#
新范围开始于
(year - prev_year) > 1 or (prev_year is NULL)
,您可以将当前年度作为新范围的第一年。将第一年分配给所有行,然后计算每组的最后一年(group_no, first_year)
.结果:
w8f9ii692#
这是一个间隙和孤岛问题,您需要将具有相同属性的行组合在一起
group_no
谁的year
s是连续的。下面是一种使用窗口函数的方法:其思想是使用
row_number()
以及year
建立团队。然后可以为每组相邻记录聚合一次,最后按group_no
.我不确定Hive是否支持
order by
在collect_list()
作为一个聚合函数-当作为窗口函数使用时,它看起来是这样的,所以这可能更好: