Я пытаюсь удалить и объединить перекрывающиеся интервалы дат, группирующиеся по идентификатору в таблице в 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
Я бы показал код, который я пробовал до сих пор, но запросыЯ пробовал до сих пор действительно сильно усложнять и, вероятно, затуманить проблему, представленную выше.