Estou usando o SQL Server 2016
Eu tenho uma tabela que contém 1 linha por mês que um paciente é atribuído a um determinado provedor.
Um paciente pode ser atribuído a vários provedores durante o ano.
Como posso derivar intervalos de datas (data de início e data de término) para representar a hora em que um paciente foi atribuído a cada provedor.
Minha tabela está assim:
+----------+---------------+------------+-----------+
| 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 |
+----------+---------------+------------+-----------+
Neste caso, o paciente 12345 foi atribuído a 2 provedores diferentes. Um para 2 meses, janeiro e dezembro e outro para o resto do ano (10 meses) de fevereiro a novembro. O paciente 56789 foi atribuído apenas a 1 provedor (1922157) por 1 mês (em dezembro).
Estou tentando fazer com que minha saída se pareça com a tabela abaixo, mas estou tendo problemas, acho que porque o paciente é atribuído ao mesmo pcp durante 2 épocas diferentes do ano. Tentei usar a função lag, mas só obtenho os resultados corretos em alguns casos, mas não em todos, como neste caso em particular.
+----------+---------------+------------+-----------+
| Provider | Patient | StartDate | EndDate |
+----------+---------------+------------+-----------+
| 1922157 | 12345 | 20190101 | 20190201 |
| 1904176 | 12345 | 20190201 | 20191201 |
| 1922157 | 12345 | 20191201 | 20191231 |
| 1922157 | 56789 | 20191201 | 20191231 |
+----------+---------------+------------+-----------+
Atualização: estava fazendo mais algumas pesquisas e me deparei com o seguinte post:
https://stackoverflow.com/questions/35900765/ms-sql-combine-date-rows-into-start-end-date
Acabei de encaixar minha tabela no código na resposta para a pergunta acima e testei alguns dos meus casos e parece que pode fazer o trabalho. Infelizmente, minha tabela base tem 140 mil linhas de datas que precisarão ser calculadas, então não tenho certeza de quanto tempo levará para ser executada. Está funcionando agora por 6 minutos, vou postar de volta com os resultados.