Я пытаюсь выяснить, как объединить несколько записей в одну, где дата TERM первой записи является днем, предшествующим дате EFFective в другой записи.
Вот некоторые примеры данных:
SELECT 1 AS MEM_ID, CAST('2017-01-01' AS DATE) AS EFF_DATE, CAST('2017-05-31' AS DATE) AS TERM_DATE
INTO #TEMP
UNION
SELECT 1 AS MEM_ID, CAST('2017-06-01' AS DATE) AS EFF_DATE, CAST('2018-01-31' AS DATE)
UNION
SELECT 1 AS MEM_ID, CAST('2018-02-01' AS DATE) AS EFF_DATE, CAST('2018-06-30' AS DATE)
UNION
SELECT 1 AS MEM_ID, CAST('2018-09-01' AS DATE) AS EFF_DATE, CAST('2078-12-31' AS DATE)
UNION
SELECT 2 AS MEM_ID, CAST('2017-02-01' AS DATE) AS EFF_DATE, CAST('2017-04-30' AS DATE)
UNION
SELECT 2 AS MEM_ID, CAST('2017-05-01' AS DATE) AS EFF_DATE, CAST('2018-03-31' AS DATE)
UNION
SELECT 2 AS MEM_ID, CAST('2018-06-01' AS DATE) AS EFF_DATE, CAST('2018-06-30' AS DATE)
UNION
SELECT 2 AS MEM_ID, CAST('2018-07-01' AS DATE) AS EFF_DATE, CAST('2078-12-31' AS DATE)
UNION
SELECT 3 AS MEM_ID, CAST('2017-01-01' AS DATE) AS EFF_DATE, CAST('2017-10-31' AS DATE)
UNION
SELECT 3 AS MEM_ID, CAST('2017-12-01' AS DATE) AS EFF_DATE, CAST('2018-03-31' AS DATE)
UNION
SELECT 3 AS MEM_ID, CAST('2018-04-01' AS DATE) AS EFF_DATE, CAST('2018-06-30' AS DATE)
UNION
SELECT 3 AS MEM_ID, CAST('2018-07-01' AS DATE) AS EFF_DATE, CAST('2078-12-31' AS DATE)
Я создал CTE, который присоединяется к себе с помощью DATE = DATE - 1 второй записи.к сожалению, он объединяет только две записи, и я не понял, как сделать его рекурсивным
;WITH TEST AS (
SELECT DISTINCT MEM_ID,
EFF_DATE,
TERM_DATE,
ROW_NUMBER()OVER(ORDER BY MEM_ID, EFF_DATE) ROW_NUM
FROM #TEMP
)
SELECT *
FROM TEST T
INNER JOIN TEST T2 ON T.MEM_ID = T2.MEM_ID AND T.TERM_DATE = DATEADD(DAY, -1, T2.EFF_DATE)
Проблема этого метода заключается в том, что может быть три или более последовательных записей, которые необходимо объединить в одну.
ID 1 должен иметь две записи - одну из 1/1/2017 - 6/30/2018
и одна из 9/1/2018 - 12/31/78
.
ID 2 также должна иметь две записи - 2/1/2017 - 3/30/2018
и 6/1/2018 - 12/31/78
.
ID 3 также должна иметь две записи - 1/1/2017 - 10/31/2017
и 12/1/2017 - 12/31/78
.
Как я могу объединить эти записи?У записей в основном будет первое число месяца для даты начала и последний день месяца для даты срока - мне не нужно беспокоиться о выбросах.
Я смотрел на аналогичный вопросно у них есть только две записи, которые нужно объединить и использовать тот же метод, который я использовал.