Sql server 两个时间戳之间时间的SQL行
我有一个包含2个时间戳的记录的表,每个时间戳与一个代理应该执行如下任务的时间块相关联Sql server 两个时间戳之间时间的SQL行,sql-server,Sql Server,我有一个包含2个时间戳的记录的表,每个时间戳与一个代理应该执行如下任务的时间块相关联 ID AgentName Date Task Start End ----------------------------------------------------------------- 1 Doris 3/12/2018 Available 3/12/18 12:30 3/12/18 14:15 2 Doris 3/12/20
ID AgentName Date Task Start End
-----------------------------------------------------------------
1 Doris 3/12/2018 Available 3/12/18 12:30 3/12/18 14:15
2 Doris 3/12/2018 Break 3/12/18 14:15 3/12/18 14:30
3 Doris 3/12/2018 Available 3/12/18 14:30 3/12/18 16:45
4 Doris 3/12/2018 Lunch 3/12/18 16:45 3/12/18 17:15
5 Doris 3/12/2018 Available 3/12/18 17:15 3/12/18 19:00
6 Doris 3/12/2018 Break 3/12/18 19:00 3/12/18 19:15
7 Doris 3/12/2018 Available 3/12/18 19:15 3/12/18 21:00
我需要把这些记录分成15分钟的间隔时间,就像这样
ID AgentName Date Task Start End Interval
-----------------------------------------------------------------------------
1 Doris 3/12/2018 Available 3/12/18 12:30 3/12/18 14:15 12:30
1 Doris 3/12/2018 Available 3/12/18 12:30 3/12/18 14:15 12:45
1 Doris 3/12/2018 Available 3/12/18 12:30 3/12/18 14:15 13:00
1 Doris 3/12/2018 Available 3/12/18 12:30 3/12/18 14:15 13:15
1 Doris 3/12/2018 Available 3/12/18 12:30 3/12/18 14:15 13:30
1 Doris 3/12/2018 Available 3/12/18 12:30 3/12/18 14:15 13:45
1 Doris 3/12/2018 Available 3/12/18 12:30 3/12/18 14:15 14:00
2 Doris 3/12/2018 Break 3/12/18 14:15 3/12/18 14:30 14:15
3 Doris 3/12/2018 Available 3/12/18 14:30 3/12/18 16:45 14:30
3 Doris 3/12/2018 Available 3/12/18 14:30 3/12/18 16:45 14:45
3 Doris 3/12/2018 Available 3/12/18 14:30 3/12/18 16:45 15:00
我有一个15分钟间隔的参考表,但我不知道现在该去哪里。我已经试过了,但无法恢复额外的间隔
select *
from dbo.Tbl_timeSlot t
full outer join dbo.Schedule s on t.Slot = convert(time, s.Start)
where convert(date, Start) = '3/12/18'
and AgentName = 'Doris'
您可以在此处使用CTE和live demo尝试此解决方案
我建议您通过图片或更好的表格方式以可读的方式格式化数据。我真的怀疑是否有人能清楚地理解你的数据看看这是否有用:@E.Garcia你可以检查我的答案谢谢maSTAShuFu这正是我需要的!
declare @myclock table (ID int, AgentName varchar(100), LogDate Date, Task varchar(20),StartTime DateTime,EndTime DateTime)
insert into @myclock
values
(1 ,'Doris','3/12/2018','Available','3/12/18 12:30','3/12/18 14:15'),
(2 ,'Doris','3/12/2018','Break','3/12/18 14:15','3/12/18 14:30'),
(3 ,'Doris','3/12/2018','Available','3/12/18 14:30','3/12/18 16:45'),
(4 ,'Doris','3/12/2018','Lunch','3/12/18 16:45','3/12/18 17:15'),
(5 ,'Doris','3/12/2018','Available','3/12/18 17:15','3/12/18 19:00'),
(6 ,'Doris','3/12/2018','Break','3/12/18 19:00','3/12/18 19:15'),
(7 ,'Doris','3/12/2018','Available','3/12/18 19:15','3/12/18 21:00')
--select * from @myclock;
;with myCteNewClock as (
select *,StartTime NewStartTime from @myclock
union all
select x.ID,x.AgentName,x.LogDate,x.Task,x.StartTime,x.EndTime, dateadd(minute,15,x.NewStartTime) NewStartTime from myCteNewClock x
inner join @myclock c
on x.ID = c.ID
where
dateadd(minute,15,x.NewStartTime) <= x.EndTime
)
select ID,AgentName,LogDate,Task,StartTime,EndTime, convert(time(0),NewStartTime) [Interval]
from myCteNewClock order by ID