我有处方药数据,有一个处方日期和天数为该处方提供。我试图估计实际的药物摄入日期,这可能是不同的处方日期,如果人们(1)重新填写他们的处方之前,他们目前的处方完成或(2)他们失去了他们目前的处方,所以需要重新填写。
以下是1名患者的样本数据:
| patient_id | rx_start_date | days_supply |
|------------|---------------|-------------|
| 1 | 1/10/2013 | 3 |
| 1 | 1/11/2013 | 3 |
| 1 | 1/14/2013 | 3 |
在不调整库存的情况下,结束日期按接收开始日期+供应天数计算,见:
| patient_id | rx_start_date | days_supply | rx_end_date |
|------------|---------------|-------------|-------------|
| 1 | 1/10/2013 | 3 | 1/12/2013 |
| 1 | 1/11/2013 | 3 | 1/13/2013 |
| 1 | 1/14/2013 | 3 | 1/16/2013 |
如您所见,第二个处方的开始日期与第一个处方重叠。如果我们假设他们提前完成处方,那么第二个处方的实际服用日期应该从2013年1月13日开始。但是移动第二个处方的结束日期会导致与第三个处方重叠,因此也必须移动。见下表:
| patient_id | rx_start_date | days_supply | rx_end_date |
|------------|---------------|-------------|-------------|
| 1 | 1/10/2013 | 3 | 1/12/2013 |
| 1 | 1/13/2013 | 3 | 1/15/2013 |
| 1 | 1/16/2013 | 3 | 1/18/2013 |
另一种情况是,我们可能会说,如果当前处方与下一个处方重叠超过50%,那么我们假设他们丢失了处方,第二个处方开始日期就是实际服用日期。这意味着我们需要截断当前处方,以便在第二个处方开始时结束。
使用非sql迭代解决方案的算法相对简单,但我在使用通用sql解决方案时遇到了问题,因为在时间x调整日期可能会导致调整许多其他日期的级联效应。我使用的是impala sql,所以递归cte不是一个选项,我希望它能在其他数据库上工作,所以特定于数据库的函数也不理想。
1条答案
按热度按时间sqxo8psd1#
只要治疗方案中没有空白,以下内容就可以满足您的需求:
使用给定的样本数据,这将作为输出:
这是在oracle上测试过的,但是所有使用的函数似乎在impala中也可以使用,所以应该在那里也可以使用。