исключить пациентов, которые умерли в течение 6 месяцев после неспецифической бактериальной инфекции - PullRequest
0 голосов
/ 02 февраля 2019

У меня есть набор данных, и мне необходимо исключить пациентов, умерших через 6 месяцев после последней зарегистрированной инфекции.
Ниже приведены данные выборки:

id      icd9    AgeAtDx AgeAtFirstDM    AgeAtDeath  disbetes    infection
479174  I288.2  68      NULL            68.166666   0.0         0.0
479174  IV45.82 68.16   NULL            68.166666   0.0         0.0
479174  IV45.82 68      NULL            68.166666   0.0         0.0
479174  I272.4  68      NULL            68.166666   0.0         0.0
479174  I276.8  68      NULL            68.166666   0.0         0.0
479174  I338.3  68.16   NULL            68.166666   0.0         0.0
479174  I197.7  68      NULL            68.166666   0.0         0.0
479174  I600.00 68      NULL            68.166666   0.0         0.0
479174  I790.5  67.6    NULL            68.166666   0.0         0.0
479174  I573.8  67.75   NULL            68.166666   0.0         0.0
479174  IV66.7  68.16   NULL            68.166666   0.0         0.0
479174  I154.1  68.16   NULL            68.166666   0.0         0.0
479174  I401.9  68      NULL            68.166666   0.0         0.0
479174  I578.1  67.66   NULL            68.166666   0.0         0.0
479174  I414.01 68.16   NULL            68.166666   0.0         0.0
479174  IV45.82 68      NULL            68.166666   0.0         1.0
479174  I715.98 67.66   NULL            68.166666   0.0         0.0
479174  I607.84 67.66   NULL            68.166666   0.0         0.0
479174  I154.1  68      NULL            68.166666   0.0         0.0
479174  I300.00 68.16   NULL            68.166666   0.0         0.0

0.0 = нет инфекции, 1.0 = инфекция
пока у меня есть следующий код

select * 
from #Data1
except
select * 
from #Data1
where infection = 1.0
and AgeAtDeath < AgeAtDx  + interval '6 month'

, он не работает.Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 02 февраля 2019

На мой взгляд, самый простой способ сделать это - использовать дни, а не месяцы, так как вы можете избежать подсчета дней в месяце и т. Д. Это если ваше решение разрешит такую ​​свободу действий.

select * 
from #Data1
except
select * 
from #Data1
where infection = 1.0
and DATEDIFF(DAY,AgeAtDeath, AgeAtDx) <= 180  --6 months

Если ваше решение не позволяет этого, то этот парень: Вычисление количества полных месяцев между двумя датами в SQL написал UDF, который позволил бы вам быть более точным.Но это может немного повлиять на производительность, используя функцию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...