Hi @Simon Evans ,
Welcome to Microsoft Q&A!
Please also refer below example:
DROP TABLE IF EXISTS #CDO_MPI_GP_HISTORY_SE2
CREATE TABLE #CDO_MPI_GP_HISTORY_SE2
(LOCAL_PATIENT_IDENTIFIER INT,
GENERAL_MEDICAL_PRACTITIONER_ASSOCIATION_START_DATE DATE,
GENERAL_MEDICAL_PRACTITIONER_ASSOCIATION_END_DATE DATE,
ORGANISATION_CODE VARCHAR(100))
INSERT INTO #CDO_MPI_GP_HISTORY_SE2 VALUES
(1,'2021-01-01','2021-01-03','YD1'),
(1,'2021-01-06','2021-01-09','YD2'),
(1,'2021-01-10','2021-01-15','YD2'),
(1,'2021-01-20','2021-01-25','YD3'),
(2,'2021-01-08','2021-01-11','YD1'),
(2,'2021-01-15','2021-01-20','YD2'),
(2,'2021-01-23','2021-01-29','YD3');
WITH CTE AS (
SELECT * ,LEAD(GENERAL_MEDICAL_PRACTITIONER_ASSOCIATION_START_DATE)
OVER (PARTITION BY LOCAL_PATIENT_IDENTIFIER ORDER BY GENERAL_MEDICAL_PRACTITIONER_ASSOCIATION_START_DATE) NEXT_START_DATE
FROM #CDO_MPI_GP_HISTORY_SE2
WHERE ORGANISATION_CODE LIKE 'YD%')
SELECT LOCAL_PATIENT_IDENTIFIER
,DATEADD(DAY,1,GENERAL_MEDICAL_PRACTITIONER_ASSOCIATION_END_DATE) AS GAP_START
,COALESCE(DATEADD(DAY,-1,NEXT_START_DATE),'4712-12-31') AS GAP_END
FROM CTE
WHERE COALESCE(NEXT_START_DATE,'4712-12-31')<>DATEADD(DAY,1,GENERAL_MEDICAL_PRACTITIONER_ASSOCIATION_END_DATE)
Output:
LOCAL_PATIENT_IDENTIFIER GAP_START GAP_END
1 2021-01-04 2021-01-05
1 2021-01-16 2021-01-19
1 2021-01-26 4712-12-31
2 2021-01-12 2021-01-14
2 2021-01-21 2021-01-22
2 2021-01-30 4712-12-31
Best regards
Melissa
If the answer is helpful, please click "Accept Answer" and upvote it.
Note: Please follow the steps in our documentation to enable e-mail notifications if you want to receive the related email notification for this thread.