I don't know how performant this will be but...declare @Logs table ( Date date, Case_ID varchar(20), Site varchar(20), Dept varchar(20), Tech varchar(20), Start_Time time )insert into @Logsvalues ('7/28/14', '10023', 'Tartville', 'Maintc', 'Amy P.', '7:30'), ('7/28/14', '56789', 'Tartville', 'Maintc', 'Rem W.', '8:05'), ('7/28/14', '23098', 'Tartville', 'Maintc', 'Amy P.', '8:35'), ('7/28/14', '70004', 'Tartville', 'Maintc', 'Amy P.', '9:10'), ('7/28/14', '12708', 'Tartville', 'Maintc', 'Mag O.', '10:00'), ('7/28/14', '10004', 'Tartville', 'Maintc', 'Amy P.', '12:30'), ('7/28/14', '40056', 'Tartville', 'Service', 'Joe F.', '7:30'), ('7/28/14', '23458', 'Tartville', 'Service', 'Joe F.', '7:55'), ('7/28/14', '69200', 'Tartville', 'Service', 'Rus T. ', '7:30')--/**/ select * from @Logs;with Logsas (select l.*, dense_rank() over (partition by l.Date, l.Site, l.Dept order by l.start_time) rnkfrom @Logs l)--select * from Logs,Rangesas (select l.Date, --l.Case_ID, l.Site, l.Dept, l.Tech, l.start_time, u.start_time End_time, row_number() over(order by l.start_time) rnfrom Logs l -- l = lower edge of rangeinner join Logs u -- u = upper edge of range on l.Date = u.Date and l.Site = u.Site and l.Dept = u.Dept and l.Tech = u.Tech and l.Start_Time <= u.Start_Time and not exists ( -- where there is not an intervening tech select * from Logs m where l.Date = m.Date and l.Site = m.Site and l.Dept = m.Dept and l.Tech <> m.Tech and l.Start_Time < m.Start_Time and m.Start_Time <u.Start_Time ) and not exists ( -- not a smaller lower edge in this range select * from Logs ll where ll.Date = l.Date and ll.Site = l.Site and ll.Dept = l.Dept and ll.Tech = l.Tech and ll.rnk = l.rnk - 1 ) and not exists ( -- not a bigger upper edge of this range select * from Logs uu where uu.Date = u.Date and uu.Site = u.Site and uu.Dept = u.Dept and uu.Tech = u.Tech and uu.rnk = u.rnk + 1 ))--select * from rangesselect l.*, row_number() over (partition by r.rn order by l.start_time) row_numfrom @Logs linner join Ranges r on r.Date = l.Date and r.Site = l.Site and r.Dept = l.Dept and r.Tech = l.Tech and l.Start_Time between r.Start_Time and r.End_timeorder by l.Dept, l.Tech, l.Start_Time
hth
Too often we enjoy the comfort of opinion without the discomfort of thought. - John F. Kennedy