Для чего бы это ни стоило, я использовал этот метод.Я думаю, что вы могли бы сделать это на чистом SQL, но он стал ужасно уродливым и трудным для отладки.
Шаг 1 - Я объединил диапазоны дат в обоих наборах данных.Это означает, что что-то вроде
ID, Start_Date, End_Date
1, 2010-01-01, 2010-01-31
1, 2010-02-01, 2010-02-28
было преобразовано в это -
ID, Start_Date, End_Date
1, 2010-01-01, 2010-02-28.
Запрос, который я использовал для этого, был -
WITH Cte_recomb (Id, Start_date, End_date, Hopcount) AS
(SELECT Id,
Start_date,
End_date,
1 AS Hopcount
FROM Table1
UNION ALL
SELECT Cte_recomb.Id,
Cte_recomb.Start_date,
Table1.End_date,
(Recomb.Hopcount + 1) AS Hopcount
FROM Cte_recomb, Table1
WHERE (Cte_recomb.Id = Table1.Id) AND
(Cte_recomb.End_date + 1 day = Table1.Start_date)),
Cte_maxenddate AS
(SELECT Id,
Start_date,
Max (End_date) AS End_date
FROM Cte_recomb
GROUP BY Id, Start_date
ORDER BY Id, Start_date)
SELECT Maxend.*
FROM Cte_maxenddate AS Maxend
LEFT JOIN
Cte_recomb AS Nextrec
ON (Nextrec.Id = Maxend.Id) AND
(Nextrec.Start_date < Maxend.Start_date) AND
(Nextrec.End_date >= Maxend.End_date)
WHERE Nextrec.Id IS NULL;
Шаг 2-
Я создал другой набор данных, который создавал запись для каждого перекрытия между двумя наборами данных.Вам понадобится дополнительный шаг, чтобы найти случаи, когда у данной записи в Таблице 1 нет соответствующей записи в Таблице 2.
SELECT Table1.Id,
Table1.Start_date AS Table1_start_date,
Table1.End_date AS Table1_end_date,
Table2.Start_date AS Table2_start_date,
Table2.End_date AS Table2_end_date
FROM Table1
INNER JOIN
Table2
ON (Table1.Plcy_id_sk = Id) AND
( (Table1.Start_date BETWEEN Table2.Start_date AND Table2.End_date) OR
(Table2.Start_date BETWEEN Table1.Start_date AND Table1.End_date)) AND
( (Table1.Start_date <> Table2.Start_date) OR
(Table1.End_date <> Table2.End_date))
ORDER BY Table1.Id, Table1.Start_date, Table2.Start_date;
Шаг 3 -
Я берувыше набора данных и запустите следующее задание SAS.Я пытался сделать это на чистом SQL с помощью рекурсивных запросов, но он становился все уродливее и уродливее каждый раз, когда я на него смотрел.дал мне результаты, которые я хотел.Есть мысли?