Я пишу код, чтобы выбрать пациентов, которые умирают в течение 30 дней после выписки из больницы. Моя проблема заключается в том, что когда у меня есть пациент с несколькими выбросами в течение этого 30-дневного толерантности, он оттягивает несколько рядов! Я попытался решить эту проблему с использованием максимальной даты сброса, которая работала, но когда я добавляю дополнительные столбцы, кажется, что вытягивает определенные элементы из других строк. Вот мой код:Выберите максимум из нескольких столбцов
SELECT MAX(IPS.disch_dttm) [Discharge Datetime]
,MAX(IPS.IP_SPELL_ID) [Spell ID]
,pat.PAS_ID [K Number]
,MAX(IPS.DIS_WARD_ID) [Ward ID]
,DSSU.SU_DESCRIPTION [Discharging Ward]
FROM Pat_spell AS IPS
LEFT JOIN PATIENT PAT WITH (NOLOCK) ON PAT.DIM_PATIENT_ID = IPS.DIM_PATIENT_ID
LEFT JOIN SPECIALTY SPEC WITH (NOLOCK) ON SPEC.DIM_SPECIALTY_ID = IPS.DIM_DIS_SPECT_ID
LEFT JOIN SERVICE_UNIT DSSU WITH (NOLOCK) ON IPS.DIM_DIS_WARD_ID = DSSU.DIM_SSU_ID
WHERE (IPS.DISCH_DTTM <= PAT.DEATH_DTTM + 30)
AND IPS.DIM_DIS_SPECT_ID = '7195'
AND IPS.DISCH_DTTM BETWEEN '01/01/2014' AND '30/06/2014'
GROUP BY pat.PAS_ID
,pat.DEATH_DTTM
,IPS.DIM_PATIENT_ID
,DSSU.SSU_DESCRIPTION
ORDER BY pat.PAS_ID
Здесь выводится из приведенной выше коды для одной строки, которые я использую для отладки:
Disch Date Event_ID Unique ID Ward ID Discharging Ward
2014-06-14 8366113 A123456 77085 WardA
выше получает подопечный ID правильно, но " Discharging Ward "не так. Также Event_ID соответствует предыдущей посещаемости. То, что я пытаюсь достичь, - это вывести только самое последнее событие в течение 30 дней с момента смерти, с «Идентификатором события» в качестве моего уникального идентификатора. Это то, что выход будет выглядеть, если я хотел несколько строк:
Disch Date Event ID Unique ID Ward ID Discharging Ward
1 2014-06-14 8208846 A123456 77085 Ward B
2 2014-05-16 8366113 A123456 77036 Ward A
Это то, что мой вывод должен выглядеть следующим образом:
Disch Date Event_ID Unique ID Ward ID Discharging Ward
2014-06-14 8208846 A123456 77085 Ward B
Так, чтобы подвести итог, мой код тянет правильную «дату выписки », правильный« Ward ID », но, похоже, вытащить остальную часть из других строк таблицы. Извинения за огромный вопрос - любая помощь будет оценена, или если это было доведено до смерти, пожалуйста, укажите мне в правильном направлении.
Почему вы засоряете запрос с помощью NOLOCK? Не важна ли точность для этого запроса? Было бы намного легче помочь с некоторыми данными ddl и sample. sqlfiddle.com - отличное место для начала. –
Общим подходом является упрощение этого SQL для выбора уникального идентификатора последней строки. Затем INNER JOIN на этот SQL, используя запрос, который извлекает другую информацию, которую вы хотите. Я могу, возможно, написать образец, если вам нужно. – laughsloudly
@SeanLange 'NOLOCK' заставляет его двигаться быстрее, не так ли? MAGIC TURBO BUTTON FTW !!!! – swasheck