sql:在重叠的日期间隔上拖放和合并

klh5stk1  于 2021-06-26  发布在  Impala
关注(0)|答案(0)|浏览(212)

我正在尝试在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

我将展示到目前为止我尝试过的代码,但是到目前为止我尝试过的查询确实过于复杂,可能会混淆上面提出的问题。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题