#left join 一对多,1个visit_id会有多个处方id,故而人次和去重人数都需distinct with sub as ( select v.dept, count(distinct v.visit_id) feb_2024_visits, count(distinct v.patient_id) feb_2024_unique_patients, round(ifnull(avg(if(pr.is_antibiotic = 1, 1, 0)),0)*100,2) feb_2024_antibiotic_rate from visits v left join prescriptions pr on v.visit_id = pr.visit_id where v.visit_date >= '2024-02-01' and v.visit_date < '2024-03-01' group by v.dept ), #提取同病人id同科室上次看诊日期 visits_sub as ( select patient_id, dept, visit_date, lag(visit_date,1)over(partition by patient_id, dept order by visit_date) visit_date_lag, datediff(visit_date, lag(visit_date,1)over(partition by patient_id, dept order by visit_date)) days from visits ), #计算各科室复诊率 visits_agg as ( select dept, round(ifnull(avg(case when days is null then 0 when days between 1 and 30 then 1 else 0 end),0)*100,2) feb_2024_revisit_rate from visits_sub where visit_date >= '2024-02-01' and visit_date < '2024-03-01' group by dept ) #结果呈现 select dept, feb_2024_visits, feb_2024_unique_patients, feb_2024_revisit_rate, feb_2024_antibiotic_rate from sub left join visits_agg using(dept) order by dept

京公网安备 11010502036488号