sql - Finding 'break' records -
could please take @ teh following task?
i have 'schedule' table. has following structure:
create table schedule ( employee nvarchar(50), shift_start datetime, shift_end datetime ) 'schedule' contains data:
insert schedule(employee,shift_start,shift_end) values ('emp01','2017-08-21 09:00:00.000','2017-08-21 12:00:00.000'), ('emp01','2017-08-21 12:30:00.000','2017-08-21 16:00:00.000'), ('emp01','2017-08-21 17:00:00.000','2017-08-21 20:00:00.000'), ('emp02','2017-08-21 09:00:00.000','2017-08-21 12:00:00.000'), ('emp02','2017-08-21 13:30:00.000','2017-08-21 16:00:00.000'), ('emp02','2017-08-21 16:30:00.000','2017-08-21 20:00:00.000'), ('emp03','2017-08-21 09:00:00.000','2017-08-21 12:00:00.000'), ('emp03','2017-08-21 15:30:00.000','2017-08-21 20:00:00.000') task:if difference between shift start date , previous shift end date each employee each date greater 1 minute , less 60 minutes - add 1 more row ('break' row) existing dataset.
thank in advance!
you need previous value. in sql server 2008, 1 way uses apply. additional rows:
select employee, prev_shift_end, shift_start, 'break' shift_type (select s.*, sprev.shift_end prev_shift_end schedule s cross apply (select top 1 s2.* schedule s2 s2.employee = s.employee , s2.shift_start < s.shift_start order s2.shift_start desc ) sprev ) s datediff(minute, prev_shift_end, shift_start) between 1 , 60; you can put insert before logic insert rows in table.


Comments
Post a Comment