【问题标题】:Straightforward query in MySQL for census information在 MySQL 中直接查询人口普查信息
【发布时间】:2022-01-11 22:10:15
【问题描述】:

在 MySQL 中是否有一个查询可以给定一个格式如下的表,给出一个范围内每个日期在每个医院接受治疗的患者数量的计数,例如日历年(即输出计数2021 年 1 月 1 日每家医院当时入院的不同患者 ID,2021 年 1 月 2 日的计数等)?

该表没有特定的日期列。

PatientID HospitalName AdmissionDate DischargeDate
002 Sacred Cross 2021-09-15 2021-09-22
003 Sacred Heart 2021-10-15 2021-12-04
004 Sacred Cross 2021-09-17 NULL

【问题讨论】:

  • select version(); 显示什么?
  • DischargeDate null 是否意味着尚未出院?如果 AdmissionDate 可以为空,这是什么意思?
  • 出院日期为尚未出院,应计入。版本是 5.7.30。谢谢你的帮助。编辑:AdmissionDate 不能为空。

标签: mysql sql census


【解决方案1】:

如果您有一个包含所需范围内所有日期的表格,这很容易。
(日历表格的example

SELECT HospitalName, Calendar_Date, Count(PatientID) AS TotalPatients
FROM Ref_Calendar cal
LEFT JOIN YourTable t
  ON cal.calendar_date BETWEEN t.AdmissionDate AND COALESCE(t.DischargeDate, '2239-06-30') 
WHERE Calendar_Date BETWEEN '2021-01-01' AND '2021-12-31'
GROUP BY HospitalName, Calendar_Date

【讨论】:

  • 谢谢 LukStorms,这很有帮助。我似乎遇到的一个问题是无效患者的数量(即尚未出院的患者)。这个脚本似乎没有计算它们 - 我只是错过了一些东西,还是有什么方法可以添加它?
  • @Michael 将 t.DischargeDate 更改为 coalesce(t.DischargeDate, '2021-12-07') 或您想要计算它们的任何日期,例如9999-12-31
  • 嗯,好吧.. 取决于你想用 NULL DischargeDate 计算那些时间。我猜... OR DischargeDate IS NULL) 可能很重要?但是@ysth coalesce 技巧应该可以工作。我只会使用cal.calendar_date BETWEEN t.AdmissionDate AND COALESCE(DischargeDate, CURRENT_DATE)
  • 使用 current_date 或 now 几乎总是一个坏主意;它假设您的数据库会话的时区是您所期望的;更好地让客户提供它想要的日期
  • 在这种情况下,只要 WHERE 子句中的范围低于今天,这种时区差异就无关紧要了。即使这包括今天,也只是意味着今天的计数可能是错误的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-16
  • 1970-01-01
  • 2018-04-01
相关资源
最近更新 更多