У меня есть следующий Эпизод пример таблицы:
Обратите внимание, где DischDate = "2020-02-20" означает - клиент не был разряжен. Это похоже на NULL (эта дата предназначена для заполнения NULL)
Моя цель состоит в том, чтобы отобразить все возможные перекрытия в одном и том же EHRClientFK следующим образом:
См. Схему всех моих возможных перекрытий:
Итак, в случае этой таблицы я ожидаю отобразить - EHRClientFK / AdmDate / DischDate только для EHRClientFK = 2 , 4, 3, 5 (что удовлетворяет схеме):
Это должна быть результирующая таблица:
EHRClientFK значения 8,9,10 не имеют дубликаты (перекрытия), клиенты 6, 7 имеют две даты адм-дис, но они НЕ перекрываются между собой. друг друга
Для достижения этого результата у меня есть следующий код:
SELECT
a.[EHRClientFK]
,a.[AdmDate]
,a.[DischDate]
FROM [WH].[dbo].[Episode] a
INNER JOIN [WH].[dbo].[Episode] b ON a.EHRClientFK = b.EHRClientFK
WHERE
((a.DischDate = '2020-02-20') AND (b.DischDate = '2020-02-20'))
OR ((a.AdmDate < b.DischDate) AND (b.AdmDate < a.DischDate))
GROUP BY
a.[EHRClientFK]
,a.[AdmDate]
,a.[DischDate]
HAVING COUNT (*) >1
Но, когда я применяю это в моей исходной таблице (с более чем 20K записями) - у меня все еще нет дубликат EHRClientFK, например 8,9,10 (очень незначительная сумма, но все же); и в некоторых случаях 6,7 без НО перекрывающихся дат
Как мне изменить мое предложение Где , чтобы удовлетворить мою схему перекрытия (чтобы охватить все случаи перекрытия) "?