假设我有如下示例所示的患者入院/索赔数据。patient_id和hosp_id列的数据类型为VARCHAR
表名claims
<表类>
rec_no
patient_id
hosp_id
admn_date
discharge_date
tbody><<tr>1 1 1 01-01-2020 10-01-2020 22 1 31-12-2019 11-01-2020 3 1 1 11-01-2020 15-01-2020 43 1 04-01-2020 10-01-2020 51 2 16-01-2020 17-01-2020 64 2 01-01-2020 10-01-2020 75 2 02-01-2020 11-01-2020 86 2 03-01-2020 12-01-2020 9 7 2 04-01-2020 13-01-2020 102 1 31-12-2019 10-01-2020 表类>
您可以使用generate_series()
在Postgres中做一些非常类似的事情。入住日期:
select c.hosp_id, gs.date, count(*) as occupanyc
from claims c cross join lateral
generate_series(admn_date, discharge_date, interval '1 day') gs(date)
group by c.hosp_id, gs.date;
然后将其用作子查询以获取超过阈值的日期:
select hd.*, b.strength
from (select c.hosp_id, gs.date, count(*) as occupancy
from claims c cross join lateral
generate_series(c.admn_date, c.discharge_date, interval '1 day') gs(date)
group by c.hosp_id, gs.date
) hd join
beds b
using (hosp_id)
where h.occupancy > b.strength