排除在第n次未指明的细菌感染后6个月内死亡的患者

时间:2019-02-02 04:34:37

标签: mysql sql

我有一个数据集,需要排除在上次报告的感染后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 :(得分:0)

在我看来,最简单的方法是使用天数而不是数月,因为您可以避免必须每月计算天数等。这就是您的解决方案可以留出余地的方法。

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

如果您的解决方案不允许这样做,那么这个人Calculating number of full months between two dates in SQL编写了一个UDF,可以使您更加精确。但是使用功能可能会稍微影响性能。