У меня есть набор данных пациентов сети здравоохранения за последние 12 месяцев. Для каждого пациента у меня есть временные метки для проведения определенного теста, временные метки для вводимых антибиотиков, временные метки для поступления в больницу (если они приняты в течение периода времени, охватываемого набором данных) и временные метки для выписки (если выписаны до конца набор данных). Иногда пациенты поступают более одного раза, проходят тест более одного раза и получают препарат более одного раза.
SELECT DISTINCT
SPatient.PatientSID
,Inpatient.AdmitDateTime
,Inpatient.DischargeDateTime
,LabChem.LabChemCompleteDateTime
,Drug.EnteredDateTime
INTO
#TempTable
FROM
SPatient
LEFT JOIN Inpatient
ON SPatient.PatientSID = Inpatient.PatientSID
LEFT JOIN LabChem
ON SPatient.PatientSID = LabChem.PatientSID
LEFT JOIN Drug
ON SPatient.PatientSID = Drug.PatientSID
Я хочу видеть только строки, в которых пациенты получали препарат в течение 24 часов после теста, но пока не были допущены. Я получаю набор, включающий один стационарный период и тест, проведенный в другой стационарный период (пациент получал тест и лекарство в течение 24 часов, находясь в стационаре, но стационарный интервал взят из более раннего периода приема!), Так что, очевидно, оба пациента находятся в стационаре временные рамки не учитываются при определении того, следует ли включать метку времени теста.
SELECT
PatientSID
,AdmitDateTime
,DischargeDateTime
,LabChemCompleteDateTime
,EnteredDateTime
FROM
#TempTable
WHERE
EnteredDateTime BETWEEN LabChemCompleteDateTime AND DATEADD(HOUR, 24, LabChemCompleteDateTime)
EXCEPT
SELECT
PatientSID
,AdmitDateTime
,DischargeDateTime
,LabChemCompleteDateTime
,EnteredDateTime
FROM
#TempTable
WHERE
EnteredDateTime BETWEEN AdmitDateTime AND DischargeDateTime
OR (
EnteredDateTime >= AdmitDateTime
AND DischargeDateTime IS NULL
)
А следующий запрос вообще ничего не возвращает.
SELECT
PatientSID
,AdmitDateTime
,DischargeDateTime
,LabChemCompleteDateTime
,EnteredDateTime
FROM
#TempTable
WHERE
EnteredDateTime BETWEEN LabChemCompleteDateTime AND DATEADD(HOUR, 24, LabChemCompleteDateTime)
AND NOT EXISTS (
SELECT
PatientSID
,AdmitDateTime
,DischargeDateTime
,LabChemCompleteDateTime
,EnteredDateTime
FROM
#TempTable
WHERE
EnteredDateTime BETWEEN AdmitDateTime AND DischargeDateTime
OR (
EnteredDateTime >= AdmitDateTime
AND DischargeDateTime IS NULL
)
)