我正在使用 SQL Server 2016
我有一个表,其中每月包含 1 行,将患者分配给特定的提供者。
一年中可以将一名患者分配给多个提供者。
如何派生日期跨度(开始日期和结束日期)来表示将患者分配给每个提供者的时间。
我的表如下所示:
+----------+---------------+------------+-----------+
| Provider | Patient | StartDate | EndDate |
+----------+---------------+------------+-----------+
| 1922157 | 12345 | 20191201 | 20191231 |
| 1904176 | 12345 | 20191101 | 20191201 |
| 1904176 | 12345 | 20191001 | 20191101 |
| 1904176 | 12345 | 20190901 | 20191001 |
| 1904176 | 12345 | 20190801 | 20190901 |
| 1904176 | 12345 | 20190701 | 20190801 |
| 1904176 | 12345 | 20190601 | 20190701 |
| 1904176 | 12345 | 20190501 | 20190601 |
| 1904176 | 12345 | 20190401 | 20190501 |
| 1904176 | 12345 | 20190301 | 20190401 |
| 1904176 | 12345 | 20190201 | 20190301 |
| 1922157 | 12345 | 20190101 | 20190201 |
| 1922157 | 56789 | 20190101 | 20190201 |
+----------+---------------+------------+-----------+
在这种情况下,患者 12345 被分配到 2 个不同的提供者。一个用于 2 个月,1 月,然后是 12 月,另一个用于一年中的其余时间(10 个月)2 月至 11 月。患者 56789 仅分配给 1 个提供者 (1922157) 1 个月(12 月)。
我正在努力做到这一点,所以我的输出如下表所示,但我遇到了我认为的问题,因为患者在一年中的 2 个不同时间被分配到同一个 pcp。我尝试使用 lag 函数,但我只在某些情况下得到正确的结果,但并非所有情况都得到正确的结果,例如这种特殊情况。
+----------+---------------+------------+-----------+
| Provider | Patient | StartDate | EndDate |
+----------+---------------+------------+-----------+
| 1922157 | 12345 | 20190101 | 20190201 |
| 1904176 | 12345 | 20190201 | 20191201 |
| 1922157 | 12345 | 20191201 | 20191231 |
| 1922157 | 56789 | 20191201 | 20191231 |
+----------+---------------+------------+-----------+
更新:正在做更多的研究,发现了以下帖子:
https://stackoverflow.com/questions/35900765/ms-sql-combine-date-rows-into-start-end-date
我只是将我的表格放入上述问题答案中的代码中,并针对我的一些案例进行了测试,看起来它可能会完成工作。不幸的是,我的基表有 140k 行日期需要计算,所以我不确定运行需要多长时间。现在已经运行了 6 分钟,我将返回结果。