如何查询患者首次变更的所属机构org_id
实现思路
- 第一步:对每个患者的所有理赔记录按日期升序排序,同时取到该患者的首个所属机构
- 第二步:筛选出所有机构不等于首个机构的记录,取时间最早的那条,对应的机构就是首次更换的新机构
- 第三步:拼接字段输出结果即可
参考SQL实现(支持所有带窗口函数的数据库,如MySQL 8.0+、PostgreSQL、Hive等)
WITH patient_org_rank AS ( -- 给每个患者的记录按日期排序,同时标记该患者的初始机构 SELECT org_id, patient_id, date, FIRST_VALUE(org_id) OVER (PARTITION BY patient_id ORDER BY date ASC) AS first_org FROM 你的表名 ), changed_org_rank AS ( -- 给所有机构变更记录按时间排序 SELECT first_org AS org, patient_id AS patient, org_id AS new_org, ROW_NUMBER() OVER (PARTITION BY patient_id ORDER BY date ASC) AS change_rn FROM patient_org_rank WHERE org_id != first_org ) -- 取每个患者第一条变更记录就是首次更换的机构 SELECT org, patient, new_org FROM changed_org_rank WHERE change_rn = 1;
适配单患者场景简化版
如果只需要查询单个患者的结果,可以直接简化写法:
SELECT (SELECT org_id FROM 你的表名 WHERE patient_id = 455259 ORDER BY date ASC LIMIT 1) AS org, patient_id AS patient, org_id AS new_org FROM 你的表名 WHERE patient_id = 455259 AND org_id != (SELECT org_id FROM 你的表名 WHERE patient_id = 455259 ORDER BY date ASC LIMIT 1) ORDER BY date ASC LIMIT 1;
内容的提问来源于stack exchange,提问作者Aaron
相关产品推荐
相关产品推荐

