在spark sql 1.5.2版上测试。 (在teradata、oracle、postgresql和sql server上做了一些小改动) 为了保证这个解决方案的正确性 order by 两个分析函数中的子句应该是相同的和确定的,因此如果您有一个id列,请使用order by'start','id',而不是order by'start','end`
select min(`Start`) as `Start`
,max(`End`) as `End`
from (select `Start`,`End`
,count(is_gap) over
(
order by `Start`,`End`
rows unbounded preceding
) + 1 as range_seq
from (select `Start`,`End`
,case
when max(`End`) over
(
order by `Start`,`End`
rows between unbounded preceding
and 1 preceding
) < `Start`
then 1
end is_gap
from mytable
) t
) t
group by range_seq
order by `Start`
1条答案
按热度按时间kokeuurv1#
在spark sql 1.5.2版上测试。
(在teradata、oracle、postgresql和sql server上做了一些小改动)
为了保证这个解决方案的正确性
order by
两个分析函数中的子句应该是相同的和确定的,因此如果您有一个id列,请使用order by'start','id',而不是order by'start','end`