You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

编写SQL查询获取近3年无'K'状态预约的患者列表

获取近3年无'K'状态预约的患者列表解决方案

方法1:左连接+分组统计

适合大多数类MySQL的受限数据库,可包含近3年无任何预约的患者:

SELECT p.PATUNIQUE, p.患者姓名 -- 替换为你需要的患者字段
FROM PATIENT p
LEFT JOIN APPT a 
  ON p.PATUNIQUE = a.PATUNIQUE 
  AND a.APPT_DATE >= DATE_SUB(CURDATE(), INTERVAL 3 YEAR) -- 替换为实际预约日期字段
GROUP BY p.PATUNIQUE, p.患者姓名
HAVING SUM(CASE WHEN a.STATUS = 'K' THEN 1 ELSE 0 END) = 0;

逻辑说明

  • 左连接保留所有患者,仅关联近3年的预约记录
  • 分组后统计该患者近3年'K'状态预约的次数,次数为0则符合要求(包括无近3年预约的患者)

方法2:NOT EXISTS子查询

更直观的写法,避免分组,注意子查询仅返回单列:

SELECT p.PATUNIQUE, p.患者姓名
FROM PATIENT p
WHERE NOT EXISTS (
  SELECT 1 -- 用SELECT 1避免返回多列报错
  FROM APPT a
  WHERE a.PATUNIQUE = p.PATUNIQUE
    AND a.STATUS = 'K'
    AND a.APPT_DATE >= DATE_SUB(CURDATE(), INTERVAL 3 YEAR)
);

逻辑说明

  • 检查当前患者是否存在近3年的'K'状态预约,不存在则返回该患者

注意事项

  • 务必将APPT_DATE替换为APPT表中实际存储预约日期的字段名
  • 如果数据库不支持DATE_SUB,可手动指定3年前的日期(如a.APPT_DATE >= '2021-09-25'),或尝试a.APPT_DATE >= CURDATE() - INTERVAL 3 YEAR
  • 若需仅保留近3年有预约但无'K'状态的患者,可在WHERE后追加:
    AND EXISTS (
      SELECT 1 FROM APPT a 
      WHERE a.PATUNIQUE = p.PATUNIQUE 
      AND a.APPT_DATE >= DATE_SUB(CURDATE(), INTERVAL 3 YEAR)
    )
    

内容的提问来源于stack exchange,提问作者Nick Lopez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 07:50:31