with a as (
    select *,lag(visit_date) over(partition by dept,patient_id order by visit_date asc) l_date
    from visits),
b as(
    select dept,ifnull(round(count(if(is_antibiotic=1 and date_format(visit_date,'%Y%m')=202402,1,null))/count(1)*100,2),0.00) c
    from prescriptions pr
    inner join visits v 
    on pr.visit_id = v.visit_id
    group by dept
)

select a.dept,
    count(if(date_format(visit_date,'%Y%m')=202402,a.visit_id,null)) feb_2024_visits,
    count( distinct if(date_format(visit_date,'%Y%m')=202402,a.patient_id,null)) feb_2024_unique_patients,
    round(count(if(datediff(visit_date,l_date)<=30 and date_format(visit_date,'%Y%m')=202402,a.visit_id,null))/count(if(date_format(visit_date,'%Y%m')=202402,a.visit_id,null))*100,2) feb_2024_revisit_rate,
    ifnull(max(c),0.00) feb_2024_antibiotic_rate
from a 
inner join patients p 
on a.patient_id = p.patient_id 
left join b 
on b.dept=a.dept
group by a.dept
order by a.dept;