如何将患者重叠时间的事件合并为单行记录?
合并患者重叠事件记录
我有一张记录患者事件的表,包含encounter_id(事件ID)、patient、start_date、end_date列,事件之间可能存在时间重叠。需要将同一患者的重叠事件合并为单个事件,合并后取所有重叠事件的最小start_date和最大end_date。
原始数据
| ENCOUNTER_ID | PATIENT | START_DATE | END_DATE |
|---|---|---|---|
| 0 | Patient1 | 2022-01-01 01:00:00.000 | 2022-01-10 01:00:00.000 |
| 1 | Patient1 | 2022-01-02 01:00:00.000 | 2022-01-05 01:00:00.000 |
| 2 | Patient1 | 2022-01-20 01:00:00.000 | 2022-01-30 01:00:00.000 |
| 3 | Patient1 | 2022-01-09 01:00:00.000 | 2022-01-15 01:00:00.000 |
| 4 | Patient2 | 2022-01-01 01:00:00.000 | 2022-01-01 02:00:00.000 |
| 5 | Patient2 | 2022-01-02 01:00:00.000 | 2022-01-02 02:00:00.000 |
| 6 | Patient2 | 2022-01-03 01:00:00.000 | 2022-01-03 02:00:00.000 |
期望结果
| ENCOUNTER_ID | PATIENT | START_DATE | END_DATE |
|---|---|---|---|
| 0 | Patient1 | 2022-01-01 01:00:00.000 | 2022-01-15 01:00:00.000 |
| 1 | Patient1 | 2022-01-20 01:00:00.000 | 2022-01-30 01:00:00.000 |
| 2 | Patient2 | 2022-01-01 01:00:00.000 | 2022-01-01 02:00:00.000 |
| 3 | Patient2 | 2022-01-02 01:00:00.000 | 2022-01-02 02:00:00.000 |
| 4 | Patient2 | 2022-01-03 01:00:00.000 | 2022-01-03 02:00:00.000 |
其中Patient1的事件0、1、3存在重叠(事件0与1重叠,0与3重叠),合并后取这三个事件的最小起始时间和最大结束时间;Patient2的事件无重叠,保持原样。
Snowflake示例表创建代码
select index as encounter_id, to_char(get(k.value, 0)) as patient, to_timestamp(get(k.value, 1)) as start_date, to_timestamp(get(k.value, 2)) as end_date from table(flatten( ARRAY_CONSTRUCT( ARRAY_CONSTRUCT('Patient1', '2022-01-01 01:00:00.000', '2022-01-10 01:00:00.000'), ARRAY_CONSTRUCT('Patient1', '2022-01-02 01:00:00.000', '2022-01-05 01:00:00.000'), ARRAY_CONSTRUCT('Patient1', '2022-01-20 01:00:00.000', '2022-01-30 01:00:00.000'), ARRAY_CONSTRUCT('Patient1', '2022-01-09 01:00:00.000', '2022-01-15 01:00:00.000'), ARRAY_CONSTRUCT('Patient2', '2022-01-01 01:00:00.000', '2022-01-01 02:00:00.000'), ARRAY_CONSTRUCT('Patient2', '2022-01-02 01:00:00.000', '2022-01-02 02:00:00.000'), ARRAY_CONSTRUCT('Patient2', '2022-01-03 01:00:00.000', '2022-01-03 02:00:00.000') ))) k
我试过用表自连接,但只能生成重叠事件对,无法实现“若事件A与B重叠、A与C重叠,则A、B、C为完整重叠组”的规则,求解决方案。
内容的提问来源于stack exchange,提问作者Gonzalo Hernandez
相关产品推荐
相关产品推荐

