【问题标题】:SQL number of patients in hospital each daySQL 每天住院病人数
【发布时间】:2018-10-09 18:11:48
【问题描述】:

我正在尝试根据入院数据和出院日期计算给定时间段内每天住院的患者人数,例如:2018 年 4 月。例如,

Patient ID  Admission date  Discharge date
A   25-Apr-18   25-Apr-18
B   25-Apr-18   26-Apr-18
C   26-Apr-18   28-Apr-18
D   29-Apr-18   01-May-18

会产生以下结果:

Date    Bed days
25-Apr-18   2
26-Apr-18   2
27-Apr-18   1
28-Apr-18   1
29-Apr-18   1
30-Apr-18   1

【问题讨论】:

  • 欢迎吉姆!为了更好地帮助您,我们希望查看当前表、一些示例数据、您的期望、您当前的 SQL 以及您正在使用的 SQL 类型(SQL Server、PostGres、MySQL 等)。
  • 顺便说一下,创建一个包含所有日期的维度表;它使这些类型的查询变得更加容易,因为您可以加入它以获取在给定日期集范围内的日期。这当然不是唯一的方法,但却是最可重复使用的。

标签: sql count days


【解决方案1】:

假设您使用的是 SQL Server,您的代码将接近:

SELECT PatientID
       ,DATEDIFF(DAY, [AdmissionDate], [DischargeDate]) AS [Bed Days]
FROM [YourTable]
GROUP BY [PatientID]

这将返回每天的 PatientID 计数。但是,如果没有更多信息,例如数据库类型/版本,或易于阅读的首选输出,您将很难获得想要的结果。

【讨论】:

  • 不考虑出院日期
  • 老实说,我无法阅读他发布的代码,因此我看不到出院日期字段。修改后我会在几分钟内更新我的答案。
【解决方案2】:

您必须弄清楚要如何解决一个战略层面的问题:日期是什么?换句话说,你已经得到了你的“期望结果”表——它是如何得到左侧的日期的?

这似乎是一个愚蠢/愚蠢的问题,但假设您的表格中有两行:

1/1/2018 through 1/3/2018
2/1/2018 through 2/3/2018

...嗯,您的报告应该包含 1/4 到 1/31 之间的所有天数,其中有“0”个患者,对吧?所以实际上,你要么必须遍历一个日期范围并生成每个日期,要么有一个主“ListOfEveryDate”表(正如他的评论中所建议的 UnhandledExcepSean。)如果你想遍历一个日期范围,是你会在 SQL 或更高级别的语言(如 .NET)中出现该循环吗?

就我个人而言,我会选择 MasterDateTable 的想法,尽管它有点笨拙,只是因为它在代码级别是多么简单:

select
    date,
    (select subquery to get count of records in data table)
from
    masterDateTable
where date between @startDate and @endDate

...只要您的代码可以确保在表格中填充日期,就可以了(您不希望代码停止工作,因为您只在 2020 年之前填充了它,但是事实证明它在 2021 年仍在使用!)

【讨论】:

    猜你喜欢
    • 2021-09-18
    • 1970-01-01
    • 2021-10-05
    • 2015-02-14
    • 2018-11-28
    • 1970-01-01
    • 2018-11-29
    • 2021-02-13
    • 1970-01-01
    相关资源
    最近更新 更多