我重新发布这个问题,因为我还没有找到最佳解决方案。
我正在设计一个捕获患者血液样本信息的表格。它有一个患者 ID 和一个采集日期 - 采集患者血液样本的日期。
该表具有三个附加列 - episode_number、episode_start_date 和 episode_end_date。一集只不过是一个 30 天的时间窗口。在 30 天内收集的任何样本都属于同一集。例如,患者在 2013 年 1 月 1 日提交了他的第一份血样,在 2013 年 1 月 -19 日提交了下一份血样。由于两个收集日期都在同一个“30 天窗口”内,它们属于同一个 episode_number(第 1 集)。本集的开始日期将是第一个收集日期(2013 年 1 月 1 日),结束日期将是开始日期 + 30 天(2013 年 1 月 30 日)。在此日期范围内收集的任何数量的患者血液样本都属于 episode_number = 1。
假设同一位患者在 2013 年 2 月 4 日提交了另一份血液样本。由于此收集日期超出了 episode_number = 1 的 30 天窗口,因此它将属于新的 episode_number(第 2 集)。本集的开始日期为 2013 年 2 月 4 日,结束日期为 + 30 天,即 2013 年 3 月 2 日。
假设表格如下例所示:
------------------------------------------------------------------------------------------
Patient ID | Collection_Date | Episode_Number |Episode_Start_Date | Episode_End_Date |
1 | 2013-01-01 | | | |
1 | 2013-01-01 | | | |
1 | 2013-01-05 | | | |
1 | 2013-02-04 | | | |
1 | 2013-02-06 | | | |
1 | 2013-05-01 | | | |
1 | 2013-08-01 | | | |
-------------------------------------------------------------------------------------------
我需要一个查询,该查询将根据我上面文本中描述的逻辑填充 episode_number、episode_start_Date 和 episode_end_date。查询结果应填充下面提到的表值:
----------------------------------------------------------------------------------------
Patient ID | Collection_Date |Episode_number |Episode_Start_Date| Episode_End_Date |
1 | 2013-01-01 |1 |2013-01-01 | 2013-01-30 |
1 | 2013-01-01 |1 |2013-01-01 | 2013-01-30 |
1 | 2013-01-05 |1 |2013-01-05 | 2013-01-30 |
1 | 2013-02-04 |2 |2013-02-04 | 2013-03-02 |
1 | 2013-02-06 |2 |2013-02-04 | 2013-02-04 |
1 | 2013-05-01 |3 |2013-05-01 | 2013-05-30 |
1 | 2013-08-01 |4 |2013-08-01 | 2013-08-30 |
----------------------------------------------------------------------------------------
要记住的事情:
- 一集 = 30 天时间窗口
- 第一集开始日期 = 首次收集日期
- 第一集结束日期 = 第一集开始日期 + 30 天
- 在同一 30 天窗口内收集的所有样本都属于同一集。
- 如果任何样本的采集日期大于上一次采集的剧集结束日期,则属于新剧集,其中剧集开始日期=采集日期;剧集结束日期 = 开始日期 + 30 天。
我希望我的问题很清楚。我的表有超过 300 万条记录,因此我不仅需要一个有效的解决方案,还需要一个具有最佳性能的解决方案。任何帮助/建议将不胜感激。
提前致谢!
阿什什