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

如何筛选同一护理员同日访问多名患者的记录?

解决同一护理员同一天访问多名患者的查询需求

嘿,这个需求很典型,我来给你几个实用的SQL方案,刚好能解决你用JOIN遇到的困惑!

核心思路

首先我们得先定位出哪些「护理员+日期」的组合对应的患者数量≥2,然后再把原表中属于这些组合的记录筛选出来就行。

方案1:用窗口函数(推荐,适合现代SQL数据库)

如果你的数据库支持窗口函数(比如MySQL 8.0+、PostgreSQL、SQL Server等),这个方法最直观:

SELECT caretakerCode, patientID, visitDate, visitAddress
FROM (
    SELECT 
        *,
        -- 按护理员和日期分组,统计每组的不同患者数量
        COUNT(DISTINCT patientID) OVER (PARTITION BY caretakerCode, visitDate) AS patient_count
    FROM your_table_name -- 替换成你的实际表名
) AS sub_query
-- 只保留患者数量大于1的记录
WHERE patient_count > 1;

方案2:用JOIN实现(对应你尝试的思路)

如果你想用JOIN的方式,其实是先通过子查询找出有问题的「护理员+日期」组合,再和原表关联:

SELECT t.*
FROM your_table_name t
INNER JOIN (
    -- 先找出同一护理员同一天访问多名患者的组合
    SELECT caretakerCode, visitDate
    FROM your_table_name
    GROUP BY caretakerCode, visitDate
    -- 统计不同患者数大于1才符合条件
    HAVING COUNT(DISTINCT patientID) > 1
) AS duplicate_groups 
    ON t.caretakerCode = duplicate_groups.caretakerCode 
    AND t.visitDate = duplicate_groups.visitDate;

注意点

  • 记得把your_table_name替换成你实际的表名
  • 如果visitDate字段包含时间(比如2022/01/14 09:30),需要用日期函数提取纯日期部分再分组,比如DATE(visitDate)(不同数据库函数可能略有差异,比如SQL Server用CAST(visitDate AS DATE))
  • 用COUNT(DISTINCT patientID)是为了排除同一护理员同一天多次访问同一患者的情况,如果你不需要排除这种情况,直接用COUNT(patientID)就行

用你给的测试数据跑这两个查询,都会得到你期望的输出结果哦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 18:30:57