如何修改SQL查询,统计多时间段内带随访的预约数量?
扩展多时间段随访预约统计的解决方案
要实现同时统计1-30天、31-90天两个时间段的随访预约数量,最简洁高效的方式是使用条件聚合(CASE WHEN + COUNT),无需多次关联表。以下是修改后的SQL查询:
select appt1.employee_id, Date(appt1.appointmentTime) as first_appt_date, -- 统计1-30天内有随访的预约数 COUNT(DISTINCT CASE WHEN DATEDIFF(appt2.appointmentTime, appt1.appointmentTime) BETWEEN 1 AND 30 THEN appt1.id END) as appt_followup_1_30, -- 统计31-90天内有随访的预约数 COUNT(DISTINCT CASE WHEN DATEDIFF(appt2.appointmentTime, appt1.appointmentTime) BETWEEN 31 AND 90 THEN appt1.id END) as appt_followup_31_90 from appointment as appt1 left join appointment as appt2 on appt1.customer_id = appt2.customer_id and appt2.appointmentTime > appt1.appointmentTime -- 确保随访预约在当前预约之后 and appt1.employee_id is not null group by appt1.employee_id, Date(appt1.appointmentTime)
关键改动说明:
- 替换内连接为左连接:原查询用内连接会过滤掉没有后续随访的预约记录,改用左连接可以保留所有员工的每日预约数据,无对应随访的列会显示为
0。 - 条件聚合实现多维度统计:通过
CASE WHEN分别判断随访时间落在不同区间,再用COUNT(DISTINCT)统计符合条件的原始预约ID,确保每个预约只被统计一次。 - 明确时间先后逻辑:新增
appt2.appointmentTime > appt1.appointmentTime避免出现随访时间早于当前预约的异常数据。
如果不需要保留无随访的预约记录,也可以继续使用内连接,但左连接的适用性更广。
内容的提问来源于stack exchange,提问作者stevo999999
相关产品推荐
相关产品推荐

