hi Mateen
hope this helps
create tables weeks entries script
drop table Entries
create table Entries (Entrytime datetime, timein varchar(8) ,dayno int)
insert Entries select '2021-05-14 07:56:00','07:56:00',14
drop table weeks
create table weeks (dayno int, weekno int)
INSERT INTO weeks ([dayno],[weekno])VALUES(1,1)
INSERT INTO weeks ([dayno],[weekno])VALUES(2,1)
INSERT INTO weeks ([dayno],[weekno])VALUES(3,1)
INSERT INTO weeks ([dayno],[weekno])VALUES(4,1)
INSERT INTO weeks ([dayno],[weekno])VALUES(5,1)
INSERT INTO weeks ([dayno],[weekno])VALUES(6,1)
INSERT INTO weeks ([dayno],[weekno])VALUES(7,2)
INSERT INTO weeks ([dayno],[weekno])VALUES(8,2)
INSERT INTO weeks ([dayno],[weekno])VALUES(9,2)
INSERT INTO weeks ([dayno],[weekno])VALUES(10,2)
INSERT INTO weeks ([dayno],[weekno])VALUES(11,2)
INSERT INTO weeks ([dayno],[weekno])VALUES(12,2)
INSERT INTO weeks ([dayno],[weekno])VALUES(13,2)
INSERT INTO weeks ([dayno],[weekno])VALUES(14,3)
INSERT INTO weeks ([dayno],[weekno])VALUES(15,3)
INSERT INTO weeks ([dayno],[weekno])VALUES(16,3)
INSERT INTO weeks ([dayno],[weekno])VALUES(17,3)
INSERT INTO weeks ([dayno],[weekno])VALUES(18,3)
INSERT INTO weeks ([dayno],[weekno])VALUES(19,4)
INSERT INTO weeks ([dayno],[weekno])VALUES(20,4)
INSERT INTO weeks ([dayno],[weekno])VALUES(21,4)
INSERT INTO weeks ([dayno],[weekno])VALUES(22,4)
INSERT INTO weeks ([dayno],[weekno])VALUES(23,4)
INSERT INTO weeks ([dayno],[weekno])VALUES(24,4)
INSERT INTO weeks ([dayno],[weekno])VALUES(25,5)
INSERT INTO weeks ([dayno],[weekno])VALUES(26,5)
INSERT INTO weeks ([dayno],[weekno])VALUES(27,5)
INSERT INTO weeks ([dayno],[weekno])VALUES(28,5)
INSERT INTO weeks ([dayno],[weekno])VALUES(29,5)
INSERT INTO weeks ([dayno],[weekno])VALUES(30,5)
INSERT INTO weeks ([dayno],[weekno])VALUES(31,5)
t-sql === for all your scenarios
;WITH employeeSchedule AS (
SELECT timein= '08:00:00', timeout= '17:00:00', weekno=1
UNION ALL SELECT timein= '20:00:00', timeout= '05:00:00', weekno=2
UNION ALL SELECT timein= '08:00:00', timeout= '15:00:00', weekno=3
UNION ALL SELECT timein= '20:00:00', timeout= '04:00:00', weekno=4
UNION ALL SELECT timein= '08:00:00', timeout= '16:00:00', weekno=5
),
cte AS (
SELECT s.*,
t.Entrytime,
t.timein AS entry_time,
t.dayno,
ABS(DATEDIFF(SECOND,
CONVERT(DATETIME,'1969/06/19 ' + t.timein),
CONVERT(DATETIME,'1969/06/19 ' + s.timein))) AS diff_seconds,
(SELECT weekno FROM weeks wk WHERE wk.dayno = t.dayno) AS relatedweekno,
ROW_NUMBER() OVER (ORDER BY
ABS(DATEDIFF(SECOND,
CONVERT(DATETIME,'1969/06/19 ' + t.timein),
CONVERT(DATETIME,'1969/06/19 ' + s.timein)))
) AS rn
FROM employeeSchedule s
JOIN entries t ON 1=1
)
SELECT *
FROM cte
WHERE rn = 1;