Выберите разницу в дате между двумя разными строками

#sql #tsql

#sql #tsql

Вопрос:

У меня есть база данных посещений больниц и назначений в одной таблице. Есть три соответствующих столбца:

  1. PAT_KEY, который является ключом пациента
  2. HOSP_DISCHRG_DT, которая является датой выписки пациента из больницы
  3. APPT_CHECKIN_DT, которая является датой, когда пациент пришел на повторный прием

Проблема, с которой я сталкиваюсь, заключается в том, что, хотя ключ пациента соединяет их, HOSP_DISCHRG_DT и APPT_CHECKIN_DT никогда не находятся в одной строке. Итак, если пациент поступил на прием в больницу, а затем пришел неделю спустя на повторный прием, они классифицируются как разные посещения и, следовательно, находятся в разных строках. (Таким образом, это не так просто, как выполнить DATEDIFF)

Моя цель: я хочу настроить индикатор, который:

  • 1 если пациент был замечен на приеме в течение 7 дней после выписки из больницы. посещение.
  • 0, если они не были замечены при повторном посещении в течение 7 дней.

Примечание: Пациент, который поступает в любое время на 7-й день, должен быть отмечен как 1. Например, пациент, у которого был визит в больницу 26.02.2019 в 13:00, у которого был повторный appt 13.02.2019 в 15:00, должен быть помечен как 1)

Смотрите приведенный ниже код моей попытки:

 SELECT PAT_KEY, HOSP_DISCHRG_DT, APPT_CHECKIN_DT,

CASE 
    WHEN DATEDIFF(day, cast (APPT_CHECKIN_DT as datetime), cast (HOSP_DISCHRG_DT as datetime)) <= 7 THEN 1 
    ELSE 0 
    END AS diff

FROM dbo.visit


WHERE HOSP_ADMIT_DT != 'NA' AND HOSP_DISCHRG_DT != 'NA'
AND 
PAT_KEY IN (SELECT PAT_KEY FROM dbo.visit WHERE DICT_ENC_TYPE_KEY = 108)


ORDER BY PAT_KEY;
  

Я ожидал увидеть таблицу с ключом patent и когда они пришли для посещения, с другим столбцом ‘diff’, который был либо 1, либо 0, и показывал, заходили ли они на неделю раньше для посещения. К сожалению, то, что я на самом деле получил, было таблицей нулей.

Комментарии:

1. Примеры данных, желаемые результаты и db<> fiddle — все это помогло бы.

Ответ №1:

Попробуйте использовать подзапрос, чтобы получить каждую необходимую строку и datediff ее, чтобы получить искомое значение..