Eu tenho uma tabela nomeada com #MySchedule
colunas StartTime
e .EndTime
duration
O que eu preciso é de uma consulta para obter todos os Slots de tempo para cada linha em MySchedule entre esses StartTime e EndTime com base na coluna de duração.
Tabela MySchedule:
create table #MySchedule
(
startTime datetime,
endtime datetime,
duration int
)
insert into #MySchedule
select '1/3/15 10:00 AM' startTime ,'1/3/15 4:00 PM' endTime ,15 duration
union all
select '1/4/15 10:00 AM' startTime ,'1/4/15 2:00 PM' endTime ,30 duration
union all
select '1/5/15 10:00 AM' startTime ,'1/5/15 4:00 PM' endTime ,45 duration
Saída esperada:
Slots StartTime EndTime
1 '1/3/15 10:00 AM' '1/3/15 10:15 AM'
2 '1/3/15 10:15 AM' '1/3/15 10:30 AM'
3 '1/3/15 10:30 AM' '1/3/15 10:45 AM'
4 '1/3/15 10:45 AM' '1/3/15 11:00 AM'
5 '1/3/15 11:00 AM' '1/3/15 11:15 AM'
. ... ...
. '1/3/15 3:45 PM' '1/3/15 4:00 PM'
---------------------------------------------
. '1/4/15 10:00 AM' '1/4/15 10:30 AM'
. '1/4/15 10:30 AM' '1/4/15 11:00 AM'
. ... ...
. '1/4/15 13:30 AM' '1/4/15 14:00 PM'
---------------------------------------------
. '1/5/15 10:00 AM' '1/5/15 10:45 AM'
. '1/5/15 10:45 AM' '1/5/15 11:30 AM'
. ... ...
. '1/5/15 15:15 AM' '1/5/15 16:00 PM'
Isso funcionará para até 100 intervalos. Pode ser facilmente expandido para 1000 adicionando outro
CROSS JOIN inc
, e assim por diante para 10.000 ...Supõe que a duração é em minutos.
CROSS JOIN
CTE CTE aumenta duas vezes e cria 10*10 linhas.ROW_NUMBER()
.Consulta:
Resultado: