Я нашел ответ, который мне помог.
«То, что у вас есть, это два медленно меняющихся типа 2 (SCD). Обычно, когда вы запрашиваете данные этого типа, вы используете один момент времени для разрезания данных. Но перекрывая их?
Это может показаться довольно трудным делом, но когда вам нужно рассмотреть только две таблицы и вы понимаете некоторую логику, шаблон на самом деле не так уж и плох.
Во-первых, тестирует перекрывающиеся диапазоны . Серьезно, добавьте этот ответ в закладки. Это удивительно, и я возвращаюсь к этому в течение многих лет!
Вы собираетесь применить упрощенное выражение из этого ответа к объединению двух таблиц: A.Start <= B.End AND A.End> B.Start
Это закончится с декартовым результатом - это нормально. Действительный эффективный диапазон каждой строки - это наименьшее перекрывающееся окно из двух таблиц:
, ПРИМЕР, КОГДА A.Start> B.Start THEN A.Start ELSE B.Start END
AS New_Start
, ДЕЛА, КОГДА A.End
И это должно дать вам новый денормализованный набор результатов SCD типа 2.
Если вам нужно сделать больше двух таблиц ... ну ... я просто написал бы сценарий постепенного объединения двух таблиц, перенося результат последнего объединения вперед в следующую, применяя тот же шаблон, что и выше.
Надеюсь, это то, что вы искали! ”