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

如何筛选满足多条件的服务记录:同一PERSON_ID与DATE_OF_SERVICE优先保留DOCTOR非空条目

解决方案:按指定规则筛选医疗服务记录

需求确认

该需求完全可实现,核心逻辑是对同一PERSON_ID和DATE_OF_SERVICE的分组记录,优先保留DOCTOR非空的条目;若分组内全为空,则保留空条目。

现有数据

PERSON_IDDOCTORDATE_OF_SERVICE
1234Dr. Smith2022-01-01
12342022-01-01
1234Dr. Jane2022-03-01
12342022-06-01

期望输出

IDDOCTORDATE_OF_SERVICE
1234Dr. Smith2022-01-01
1234Dr. Jane2022-03-01
12342022-06-01

SQL实现方案

使用窗口函数ROW_NUMBER()对每组记录排序,优先保留DOCTOR非空条目,代码如下:

WITH ranked_records AS (
    SELECT 
        PERSON_ID AS ID,
        DOCTOR,
        DATE_OF_SERVICE,
        -- 给DOCTOR非空的记录分配排名1,空值分配排名2
        ROW_NUMBER() OVER (
            PARTITION BY PERSON_ID, DATE_OF_SERVICE 
            ORDER BY CASE WHEN DOCTOR IS NOT NULL AND DOCTOR != '' THEN 1 ELSE 2 END
        ) AS rn
    FROM your_table_name
)
SELECT ID, DOCTOR, DATE_OF_SERVICE
FROM ranked_records
WHERE rn = 1;

代码逻辑说明

  1. 分组:通过PARTITION BY PERSON_ID, DATE_OF_SERVICE将同一患者同一服务日期的记录归为一组。
  2. 排序规则:用CASE表达式标记优先级,DOCTOR非空的记录排第1位,空值排第2位,确保每组内非空条目优先保留。
  3. 筛选:只保留每组中排名为1的记录,若组内全为空,则保留那条空记录。

补充说明

  • 若数据库中DOCTOR字段的空值是NULL而非空字符串,可将CASE条件简化为CASE WHEN DOCTOR IS NOT NULL THEN 1 ELSE 2 END。
  • 代码支持多患者批量处理,无需额外修改。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 03:35:28