Это было бы хорошим местом для рекурсивного CTE, но, к сожалению, Hive не поддерживает их. Вот еще один подход, который использует производную таблицу чисел для разделения периодов:
select
t.SrNo,
t.Employee,
greatest(t.startDate, date_add(to_date(t.startDate), x.n)) startDate,
least(t.endDate, date_add(to_date(t.startDate), x.n + 1)) endDate
from mytable t
inner join (select 0 n union all select 1 union all select 2) x
on date_add(to_date(t.startDate), x.n) <= t.endDate
Вы можете расширить подзапрос для обработки большего количества возможных периодов в строке.
Также обратите внимание, что это создает полуоткрытые интервалы, где конец предыдущего интервала равен началу следующего (в то время как в вашем наборе результатов есть задержка в одну минуту). Логика c заключается в том, что интервал включается в его меньшую границу и исключает внешнюю границу (таким образом, вы не должны оставлять никаких пробелов).