Hive 中给定记录集的最小和最大日期
Min and Max dates from the given set of records in Hive
全部,
我需要在 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,我将其标记为新的 record.But,我不确定之后如何拆分记录.非常感谢任何帮助或指导。
预期结果
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
这是一种间隙和孤岛问题。您需要确定 "islands" 存在的位置。假设时间段相邻(如您的示例所示),您可以使用 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;
可以调整此逻辑以处理重叠,但您的数据似乎不需要这样做。
全部, 我需要在 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,我将其标记为新的 record.But,我不确定之后如何拆分记录.非常感谢任何帮助或指导。
预期结果
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
这是一种间隙和孤岛问题。您需要确定 "islands" 存在的位置。假设时间段相邻(如您的示例所示),您可以使用 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;
可以调整此逻辑以处理重叠,但您的数据似乎不需要这样做。