Click here to Skip to main content
15,886,075 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
table shift
FromTime ToTime
08:00:00 18:00:00
this is employee shift.. More can be included deference shifts employee wise .



table in/out

EnrollNumber DateInOut Biometric machine
15045 2016-04-11 08:00:00 IN
15045 2016-04-11 23:00:00 OUT
15045 2016-04-12 08:00:00 IN
15045 2016-04-13 00:15:00 NEXT DAY OUT
15045 2016-04-13 06:00:00




I want to display

EnrollNumber DateIn DateOut
15045 2016-04-11 08:00:00 2016-04-11 23:00:00 CURRENT DAY OUT
15045 2016-04-12 08:00:00 2016-04-13 00:15:00 NEXT DAY OUT


I need to display the correct in/out by employee number and microsoft sql server views using how to create this table.

What I have tried:

FromTime ToTime
22:00:00 6:00:00
09:00:00 18:00:00

EnrollNumber DateInOut
15045 2016-04-11 22:00:00
15045 2016-04-11 23:00:00
15045 2016-04-12 06:00:00
15045 2016-04-12 22:00:00
15045 2016-04-13 06:00:00
15045 2016-04-14 06:00:00
15045 2016-04-14 22:00:00
15045 2016-04-15 06:00:00
15045 2016-04-18 09:10:00
15045 2016-04-18 18:00:00
15045 2016-04-18 20:00:00

I try your solution
;WITH clean AS
(
SELECT EnrollNumber, DateInOut AS DateIn,
ROW_NUMBER() OVER (PARTITION BY EnrollNumber ORDER BY EnrollNumber, DateInOut) rn
FROM tblCheckInOut

), clean2 AS
(
SELECT DISTINCT clean.EnrollNumber, clean.DateIn, prev.DateIn as DatePrev, clean.rn
FROM clean
LEFT OUTER JOIN clean prev ON prev.rn = clean.rn - 1

), clean3 AS(
SELECT DISTINCT EnrollNumber, CASE WHEN DATEDIFF(hh, DatePrev, DateIn) <= (SELECT DATEDIFF(hh, CAST([To Time] AS DateTime), CAST([From Time] AS DateTime))
FROM dbo.tblEmployee emp INNER JOIN
dbo.tblShiftMatrix m ON emp.EmpNo = m.EmpId INNER JOIN
dbo.tblShift s ON m.ShiftId = s.Id
WHERE emp.EmpNo = EnrollNumber AND CAST(ShiftDate as Date) = cast(T1.DateIn as date))

THEN DatePrev ELSE DateIn END AS DateInOut
FROM clean2 T1)
, clean4 AS (
SELECT EnrollNumber, DateInOut AS DateIn
,ROW_NUMBER()
OVER(PARTITION BY EnrollNumber ORDER BY EnrollNumber, DateInOut) AS rn
from clean3
),clean5 AS (
SELECT DISTINCT clean4.EnrollNumber, clean4.DateIn, nxt.DateIn as DateOut, clean4.rn
FROM clean4
LEFT OUTER JOIN clean4 nxt ON nxt.rn = clean4.rn + 1
)
SELECT EnrollNumber,Cast(DateIn as Date) Date, Cast(DateIn as datetime) as [Time In], Cast(DateOut as datetime) as [Time Out]
FROM clean5
WHERE DateOut IS NOT NULL AND rn%2<>0
ORDER BY EnrollNumber, DateIn

and the result is
EnrollNumber Date Time In Time Out
15045 2016-04-08 2016-04-08 21:00:00.000 2016-04-09 06:00:00.000
15045 2016-04-11 2016-04-11 22:00:00.000 2016-04-12 06:00:00.000
15045 2016-04-12 2016-04-12 22:00:00.000 2016-04-13 06:00:00.000
15045 2016-04-13 2016-04-13 22:30:00.000 2016-04-14 06:00:00.000
15045 2016-04-14 2016-04-14 22:00:00.000 2016-04-18 09:10:00.000
15045 2016-04-18 2016-04-18 18:00:00.000 2016-04-18 20:00:00.000

This code cannot create ms sql server views table use.. and How to views create sql server and date range filter?

@Member 12322427
Posted
Comments
[no name] 5-May-21 22:15pm    
What if they punch in and out more than once per day? Or forget to punch out?
lakith sandeepa 6-May-21 5:27am    
2021.05.06 8.30 PM to Next day 2021.05.07 2.00AM Assume worked. The time frame that takes place there should be taken.
lakith sandeepa 6-May-21 5:29am    
In the meantime, he should consider including his shift
[no name] 6-May-21 12:46pm    
Self join enroll # and start date (time in), with the input: so you get enroll#, start date, date in, date out. Then pivot on Enroll # and start date.
lakith sandeepa 7-May-21 23:13pm    
can you example plz..

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900