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
这是一种间隙和孤岛问题。 您需要确定"孤岛"存在的位置。 假设时间段相邻(如示例中所示(,您可以使用join
或exists
:
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;
可以调整此逻辑以处理重叠,但数据似乎不需要这样做。