Извлечь последнюю запись из выражения с несколькими условиями? - PullRequest
0 голосов
/ 15 октября 2019

Я имею дело с ситуацией, когда мне нужно извлечь только одну запись для пациента на основании определенного диагноза. В этом случае у пациента может быть несколько диагнозов, которые перечислены как current_icd10_list, и каждый диагноз делается при посещении, что можно определить по дате контакта. В этом случае у пациента может быть диагностировано несколько диагнозов схожих типов в разное время, но мне нужно вытащить только последний. В моем примере, скажем, у меня был пациент, которому сначала поставили диагноз Dx 1, а затем Dx 2 at. Я только хочу поставить последний диагноз, который будет Dx 2. Как бы я это сделал?

select 
CONTACT_DATE,                
WHEN current_icd10_list LIKE '%E10.0%'
...
OR current_icd10_list LIKE '%E14.9%' 
THEN 'Dx 1'

WHEN current_icd10_list LIKE '%E10.2%'
...
OR current_icd10_list LIKE '%E14.7%' 
THEN 'Dx 2'
END AS 'Dx Group'

Ответы [ 3 ]

0 голосов
/ 15 октября 2019

Разве вы не смогли бы просто вытащить, используя функцию максимальной даты, используя ваши критерии current_icd10_list? Например:

select max(CONTACT_DATE) as max_date,                
case WHEN current_icd10_list LIKE '%E10.0%'
OR current_icd10_list LIKE '%E14.9%' 
THEN 'Dx 1'

WHEN current_icd10_list LIKE '%E10.2%'
OR current_icd10_list LIKE '%E14.7%' 
THEN 'Dx 2'
END AS 'Dx Group'

from mytable 

group by 
case WHEN current_icd10_list LIKE '%E10.0%'
OR current_icd10_list LIKE '%E14.9%' 
THEN 'Dx 1'

WHEN current_icd10_list LIKE '%E10.2%'
OR current_icd10_list LIKE '%E14.7%' 
THEN 'Dx 2'
END
 ; 
0 голосов
/ 15 октября 2019

Таким образом, я решил эту проблему, разделив пациентов с Dx в «Dx group» и использовав row_number, чтобы упорядочить их по contact_date. Затем я отправил его обратно к остальным данным.

0 голосов
/ 15 октября 2019

Мне нужно вытащить только одну запись для пациента на основании конкретного диагноза [...] У пациента может быть несколько диагнозов [...], но мне нужно вытащить только последний.

Вы бы использовали row_number() для этого. Предполагая, что идентификатор пациента хранится в столбце patient_id, а дата посещения сохраняется в contact_date:

select *
from (
    select
        t.*,
        row_number() over(partition by patient_id order by contact_date desc) rn
    from mytable t
) x
where rn = 1
...