最小值和最大值日期来自 Hive 中的给定记录集



All, 我需要在 Hive 中获取记录集的最小和最大日期。我的数据看起来像这样。

Key    start_date    end_date
----   ----------    ---------      
111    01-01-2017    06-30-2017
111    07-01-2017    07-31-2017
111    09-01-2017    09-30-2017
111    10-01-2017    10-20-2017
111    11-01-2017    11-30-2017

输出我期望的是

key   start_date    end_date
---   ---------     --------
111   01-01-2017    07-31-2017
111   09-01-2017    10-20-2017
111   11-01-2017    11-30-2017

基本上,每当日期范围中断时,我都需要将其写为新记录。

我试图获取结束日期和开始日期之间的日期差异,如果它大于 1,我将其标记为新记录。但是,我不确定之后如何拆分记录。任何帮助或指导将不胜感激。

预期成果

key   start_date    end_date
111   01-01-2017    07-31-2017
111   09-01-2017    10-20-2017
111   11-01-2017    11-30-2017

这是一种间隙和孤岛问题。 您需要确定"孤岛"存在的位置。 假设时间段相邻(如示例中所示(,您可以使用joinexists

select key, min(start_date), max(end_date)
from (select t.*,
sum(case when tprev.key is null then 1 else 0 end) over (partition by t.key order by t.start_date) as grp
from t left join
t tprev
on tprev.key = t.key and
tprev.end_date = date_add(t.start_date, -1)
) t
group by key, grp;

可以调整此逻辑以处理重叠,但数据似乎不需要这样做。

相关内容

最新更新