SQL: Drop & Merge на перекрывающихся интервалах дат - PullRequest
0 голосов
/ 03 июля 2019

Я пытаюсь удалить и объединить перекрывающиеся интервалы дат, группирующиеся по идентификатору в таблице в IMPALA SQL .Отбрасывание должно происходить, когда атрибуты в перекрытии (один и тот же идентификатор и один и тот же таймфрейм) не совпадают, а если атрибуты одинаковы, их можно объединить.

Краткое описание столбцов таблицы:

  • ID : должно быть уникальным в любой момент времени.
  • атрибуты: должен быть уникальным в любой момент времени для каждого идентификатора.
  • start_date : начало периода действия для записи.
  • end_date : конец периода действия для записи.

Пример входной таблицы:

  # 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

Какой SQL-запрос Impala будет отбрасывать записи, перекрывающиеся во времени с одинаковым идентификатором, но с разными атрибутами, при объединении записей, перекрывающихся во времени с одинаковым идентификатором и одинаковыми атрибутами?

Некоторые связанные вопросы:

ДОПОЛНИТЕЛЬНО: Какой запрос 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    

Я бы показал код, который я пробовал до сих пор, но запросыЯ пробовал до сих пор действительно сильно усложнять и, вероятно, затуманить проблему, представленную выше.

...