我想根据时间把一行分成多行。
SrNo Employee StartDate EndDate
---------------------------------------------------------------------------
1 emp1 30/03/2020 09:00:00 31/03/2020 07:15:00
2 emp2 01/04/2020 09:00:00 02/04/2020 08:00:00
预期产出如下:
SrNo Employee StartDate EndDate
---------------------------------------------------------------------------
1 emp1 30/03/2020 09:00:00 30/03/2020 11:59:00
1 emp1 31/03/2020 00:00:00 31/03/2020 07:15:00
2 emp2 01/04/2020 09:00:00 01/04/2020 11:59:00
2 emp2 02/04/2020 00:00:00 02/04/2020 08:00:00
一天从上午00:00开始到第二天上午00:00。什么时候 EndDate
时间大于上午00:00(午夜),则将此日期分为两行。第一行结束日期为30/03/2020 11:59:00,下一行开始日期为31/03/2020 00:00:00。
请帮我解决这个问题。
1条答案
按热度按时间3qpi33ja1#
这对于递归cte来说是个好地方,但不幸的是,hive不支持这些。下面是另一种方法,它使用派生的数字表来拆分时段:
您可以展开子查询以处理每行更多可能的句点。
还要注意,这会生成半开放的间隔,其中前一个间隔的结束时间等于下一个间隔的开始时间(而在结果集中有一分钟的延迟)。逻辑上,间隔在较小的边界上是包含的,在外部边界上是独占的(这样,您就可以确保不留下任何间隙)。