如何从 SQL 中的历史住院数据计算每月 30 天的再入院率?

梅尔

我想根据 5 年 (60) 个月的住院数据计算每月再入院率。一些住院病人在这段时间内重新入院次数超过 10 次,而另一些则只有一次。

数据表如下所示。例如,身份证号码的住院病人。201 五年才被录取一次,但 ID 没有。212例4次,其中3日内再入院2例。

如何使用 SQL 中的此类数据计算医院每月 30 天的再入院率?30 天再入院是指住院患者在上次出院后 30 天内再次入院 谢谢!

  ID   | SN    | Admdate     | Disdate       |
+------+-------+-------------+---------------+
|**212 | 1     | 2014-01-01  | 2014-01-12**  |
|201   | 2     | 2014-01-01  | 2014-01-10    |
|**212 | 598   | 2014-01-28  | 2014-02-12**  |
|**212 | 10000 | 2016-12-23  | 2016-12-29 ** |
| **212| 15112 | 2017-06-10  | 2017-06-21 ** |
|*401  | 20101 | 2018-01-01 | 2018-01-11     |*
|*401  | 21101 | 2018-02-01 | 2018-02-13     |*
|401   | 22101 | 2018-10-01  | 2018-10-11    |
卡斯滕·马斯曼

看起来,我有点晚了,但尽管如此 - 这是我的建议:

WITH mnths AS (
  select cast(1 as int) m 
  UNION ALL select m+1 FROM mnths WHERE m<60 
), admdis AS (
  SELECT *, 12*(year(admdate)-2014)+month(admdate)a, 12*(year(disdate)-2014)+month(disdate) d 
  FROM tbl t
  WHERE exists (SELECT 1 FROM tbl WHERE id=t.id AND disdate>DATEADD(day, -30, t.admdate) and sn<t.sn) 
)
SELECT (m-1)/12+2014 yr, 1+(m-1)%12 mn,m, count(id) readm 
FROM mnths LEFT JOIN admdis ON a=m
GROUP BY m 

我建立了一个数字表mnths来生成一个规则的月份网格,然后我计算重新入院的人数CTEadmdis只列出了那些在上次出院后不到 30 天发生的入院患者。

可以在此处找到演示:https : //rextester.com/TLM57882

编辑

在查看 forpas 的解决方案时,我意识到我没有计算实际再入院这是一个修改版本,完全可以做到这一点:

WITH mnths AS (
  select cast(1 as int) m 
  UNION ALL select m+1 FROM mnths WHERE m<60 
), admdis AS (
  SELECT *, 12*(year(admdate)-2014)+month(admdate)a, 12*(year(disdate)-2014)+month(disdate) d,
        (SELECT 1 FROM tbl WHERE id=t.id AND disdate>DATEADD(day, -30, t.admdate) and sn<t.sn) readm
  FROM tbl t
)

SELECT (m-1)/12+2014 yr, 1+(m-1)%12 mn, count(id) totl ,count(readm) readm, 
       case when count(id)>0 THEN (0.+count(readm))/ count(id) ELSE 0 END rate
FROM mnths LEFT JOIN admdis ON a=m
GROUP BY m 

在计算比率时,我必须确保我没有“除以零”,因此,在没有录取发生的那些月份,比率被假定为零(但实际上并未计算)。

演示:https : //rextester.com/NFCXQ24711

这是生成的结果:

yr    mn totl readm rate
2014    1   3   1   0.333333333333
2014    2   0   0   0.000000000000
2014    3   0   0   0.000000000000
2014    4   0   0   0.000000000000
2014    5   0   0   0.000000000000
2014    6   0   0   0.000000000000
2014    7   0   0   0.000000000000
2014    8   0   0   0.000000000000
2014    9   0   0   0.000000000000
2014    10  0   0   0.000000000000
2014    11  0   0   0.000000000000
2014    12  0   0   0.000000000000
2015    1   0   0   0.000000000000
2015    2   0   0   0.000000000000
2015    3   0   0   0.000000000000
2015    4   0   0   0.000000000000
2015    5   0   0   0.000000000000
2015    6   0   0   0.000000000000
2015    7   0   0   0.000000000000
2015    8   0   0   0.000000000000
2015    9   0   0   0.000000000000
2015    10  0   0   0.000000000000
2015    11  0   0   0.000000000000
2015    12  0   0   0.000000000000
2016    1   0   0   0.000000000000
2016    2   0   0   0.000000000000
2016    3   0   0   0.000000000000
2016    4   0   0   0.000000000000
2016    5   0   0   0.000000000000
2016    6   0   0   0.000000000000
2016    7   0   0   0.000000000000
2016    8   0   0   0.000000000000
2016    9   0   0   0.000000000000
2016    10  0   0   0.000000000000
2016    11  0   0   0.000000000000
2016    12  1   0   0.000000000000
2017    1   0   0   0.000000000000
2017    2   0   0   0.000000000000
2017    3   0   0   0.000000000000
2017    4   0   0   0.000000000000
2017    5   0   0   0.000000000000
2017    6   1   0   0.000000000000
2017    7   0   0   0.000000000000
2017    8   0   0   0.000000000000
2017    9   0   0   0.000000000000
2017    10  0   0   0.000000000000
2017    11  0   0   0.000000000000
2017    12  0   0   0.000000000000
2018    1   1   0   0.000000000000
2018    2   1   1   1.000000000000
2018    3   0   0   0.000000000000
2018    4   0   0   0.000000000000
2018    5   0   0   0.000000000000
2018    6   0   0   0.000000000000
2018    7   0   0   0.000000000000
2018    8   0   0   0.000000000000
2018    9   0   0   0.000000000000
2018    10  1   0   0.000000000000
2018    11  0   0   0.000000000000
2018    12  0   0   0.000000000000

该列totl包含该时期的总入院readm人数、再入院次数和rate的比率readm/totl(或在 0 的情况下totl为 0)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何从 SQL 中的历史住院数据计算每月 30 天的再入院率?

来自分类Dev

计算再入院率

来自分类Dev

如何计算含groupdate的30天邮件?

来自分类Dev

如何获得 epoch 中的最后 30 天

来自分类Dev

如何从现在开始从SQL表获取30天

来自分类Dev

如何使用SQL Server从当前日期减去30天

来自分类Dev

最近30天的SQL Server数据及所有数据

来自分类Dev

如何从 SQLite 存储和检索过去 30 天的数据?

来自分类Dev

如何从Blob容器中删除超过30天的文件?

来自分类Dev

如何在Java中压缩30天以上的文件

来自分类Dev

如何在一个SQL中以每周和每月的粒度计算数据

来自分类Dev

SQL在生日的30天内(无论年份如何)送人

来自分类Dev

sql查询以获取未来30天的记录

来自分类Dev

如何获取不在30天内的下一个最小日期并将其用作SQL中的参考点?

来自分类Dev

在SQL中选择最近30天中的每一天的平均价格

来自分类Dev

如何使用linq to sql从SQL获取项目,其中Date是从今天到30天,然后以列表形式返回

来自分类Dev

30天后如何创建cron作业以重置数据库中的值?

来自分类Dev

如何按天返回接下来 30 天组的数据集

来自分类Dev

如何连续30天设置UILocalNotification

来自分类Dev

如何获取今天的-30 / -60天的日期?

来自分类Dev

如何忽略间隔为30天的行?

来自分类Dev

在Teradata中,SQL代码用于计算出院后30天内的紧急就诊次数

来自分类Dev

SQL SERVER-选择未来30天(含1年以上)的数据

来自分类Dev

如何从当前日期(MySQL)计算接下来的 30 天?

来自分类Dev

如何在 Oracle Sql 中返回 20 到 30 之间的行

来自分类Dev

如何修复 SQL Developer Data Modeller 中的“错误:FK 名称长度超过最大允许长度(30)”

来自分类Dev

AWS AppSync - 如何按日期范围(今天到 30 天前)查询数据?

来自分类Dev

如何选择MySQL中最近30天的日期,即使MySQL中不存在日期?

来自分类Dev

如何在php中获取更新日期少于30天的所有记录

Related 相关文章

  1. 1

    如何从 SQL 中的历史住院数据计算每月 30 天的再入院率?

  2. 2

    计算再入院率

  3. 3

    如何计算含groupdate的30天邮件?

  4. 4

    如何获得 epoch 中的最后 30 天

  5. 5

    如何从现在开始从SQL表获取30天

  6. 6

    如何使用SQL Server从当前日期减去30天

  7. 7

    最近30天的SQL Server数据及所有数据

  8. 8

    如何从 SQLite 存储和检索过去 30 天的数据?

  9. 9

    如何从Blob容器中删除超过30天的文件?

  10. 10

    如何在Java中压缩30天以上的文件

  11. 11

    如何在一个SQL中以每周和每月的粒度计算数据

  12. 12

    SQL在生日的30天内(无论年份如何)送人

  13. 13

    sql查询以获取未来30天的记录

  14. 14

    如何获取不在30天内的下一个最小日期并将其用作SQL中的参考点?

  15. 15

    在SQL中选择最近30天中的每一天的平均价格

  16. 16

    如何使用linq to sql从SQL获取项目,其中Date是从今天到30天,然后以列表形式返回

  17. 17

    30天后如何创建cron作业以重置数据库中的值?

  18. 18

    如何按天返回接下来 30 天组的数据集

  19. 19

    如何连续30天设置UILocalNotification

  20. 20

    如何获取今天的-30 / -60天的日期?

  21. 21

    如何忽略间隔为30天的行?

  22. 22

    在Teradata中,SQL代码用于计算出院后30天内的紧急就诊次数

  23. 23

    SQL SERVER-选择未来30天(含1年以上)的数据

  24. 24

    如何从当前日期(MySQL)计算接下来的 30 天?

  25. 25

    如何在 Oracle Sql 中返回 20 到 30 之间的行

  26. 26

    如何修复 SQL Developer Data Modeller 中的“错误:FK 名称长度超过最大允许长度(30)”

  27. 27

    AWS AppSync - 如何按日期范围(今天到 30 天前)查询数据?

  28. 28

    如何选择MySQL中最近30天的日期,即使MySQL中不存在日期?

  29. 29

    如何在php中获取更新日期少于30天的所有记录

热门标签

归档