我正在尝试在impalasql的表中删除和合并每个id分组的重叠日期间隔。当重叠中的属性(相同的id和相同的时间段)不相同时,应该发生丢弃,而如果属性相同,则可以合并它们。
表列的快速说明:
id:在任何时间点都应该是唯一的。
属性:每个id在任何时间点都应该是唯一的。
起始日期:记录有效期的起始日期。
结束日期:记录有效期的结束。
输入表示例:
# Table: MY_TABLE
ID attributes StartDate EndDate
--------------------------------------------
1 cool 2017-01-01 2017-02-01
1 cool 2017-01-03 2017-04-01
1 handsome 2017-05-01 2017-08-31
1 beautiful 2017-08-01 2017-11-10
2 nice 2017-05-30 2017-05-31
2 nicer 2017-05-30 2017-08-31
3 something 2017-10-01 2017-11-01
3 something 2017-11-02 2017-12-25
3 something 2018-10-01 2018-11-01
3 other thing 2018-12-01 2018-12-25
所需的sql查询应产生结果(每个案例的注解):
# Desired Output:
ID attributes StartDate EndDate
------------------------------------------
1 cool 2017-01-01 2017-04-01 #-> merged 2 rows with same ID & attributes
1 handsome 2017-05-01 2017-07-31 #-> dropped overlap (20170801 to 20170831)
1 beautiful 2017-09-01 2017-11-10 #-> dropped overlap (20170801 to 20170831)
2 nicer 2017-06-01 2017-08-31 #-> dropped overlap (20170530 to 20170531)
3 something 2017-10-01 2017-11-01 #-> No overlap
3 something 2017-11-02 2017-12-25 #-> No overlap
3 something 2018-10-01 2018-11-01 #-> No overlap
3 other thing 2018-12-01 2018-12-25 #-> No overlap
什么样的impala sql查询会在合并具有相同id和相同属性的时间重叠的记录时删除具有相同id和不同属性的时间重叠的记录?
一些相关问题:
impalasql:合并日期重叠的行。存在且不支持递归cte
消除和减少重叠的日期范围
合并重叠日期间隔
另外:哪一个sql查询可以得到那些丢弃的重叠?
# Dropped Overlaps table
ID attributes StartDate EndDate
------------------------------------------
1 handsome 2017-08-01 2017-08-31
1 beautiful 2017-08-01 2017-08-31
2 nice 2017-05-30 2017-05-31
2 nicer 2017-05-30 2017-05-31
我将展示到目前为止我尝试过的代码,但是到目前为止我尝试过的查询确实过于复杂,可能会混淆上面提出的问题。
暂无答案!
目前还没有任何答案,快来回答吧!