【发布时间】:2021-10-05 21:22:10
【问题描述】:
假设我有如下示例所示的患者入院/索赔数据。 patient_id 和 hosp_id 列的数据类型为VARCHAR
表名claims
| rec_no | patient_id | hosp_id | admn_date | discharge_date |
|---|---|---|---|---|
| 1 | 1 | 1 | 01-01-2020 | 10-01-2020 |
| 2 | 2 | 1 | 31-12-2019 | 11-01-2020 |
| 3 | 1 | 1 | 11-01-2020 | 15-01-2020 |
| 4 | 3 | 1 | 04-01-2020 | 10-01-2020 |
| 5 | 1 | 2 | 16-01-2020 | 17-01-2020 |
| 6 | 4 | 2 | 01-01-2020 | 10-01-2020 |
| 7 | 5 | 2 | 02-01-2020 | 11-01-2020 |
| 8 | 6 | 2 | 03-01-2020 | 12-01-2020 |
| 9 | 7 | 2 | 04-01-2020 | 13-01-2020 |
| 10 | 2 | 1 | 31-12-2019 | 10-01-2020 |
我有另一个表,其中存储了医院的床位强度/最大入住强度。
表名beds
| hosp_id | bed_strength |
|---|---|
| 1 | 3 |
| 2 | 4 |
预期结果我想找出医院宣布的床位强度在任何一天都超过的日期。
我尝试过的代码 什么都没有,因为我是 SQL 新手。但是,我可以通过以下策略在 R 中解决这个问题
-
pivot_longer日期 -
tidyr::complete()两者之间缺少日期 -
summarise或aggregate每个日期的结果。
同时,我还想知道是否可以在 sql 中不进行旋转(如果有)的情况下完成,因为在 claims 表中有 1500 万 + 行,旋转真的真的减慢了这个过程。请帮忙。
【问题讨论】:
-
您需要计算重叠间隔。存在各种解决方案。
-
你能给我提供其中任何一个的链接吗?
-
尝试this answer中的方法。基本上,您使用 union all 创建一组进入和退出日期,然后执行运行总和......在进入时增加它并在退出时减少它。总和大于 x 的日期是您的目标。
-
@AnilGoyal 你也可以添加预期的结果吗?
标签: sql postgresql date postgresql-13