У меня есть две таблицы, основанные на времени входа и выхода из таблицы1. Я пытаюсь получить время входа и выхода из таблицы 2. Ниже приведенный запрос работает отлично для дневных рабочих ударов, но для выходных данных за ночь меняется.
Таблица 1: Daily_attendace_data
att_date emp_code in_time out_time
2018-10-21 9999 2018-10-21 08:00:00.000 2018-10-22 06:00:00.000
Таблица 2: Trnevents
emp_reader_id DT
9999 2018-10-21 08:00:00.000
9999 2018-10-22 06:00:00.000
Мой запрос:
Я использую Pivot, чтобы получить все удары
declare @tempProcesstable as table(
[id] [nvarchar](200) NULL,
[time_stamp] datetime NULL,
[AccessType] varchar(3) NULL)
insert into @tempProcesstable
select distinct t1.emp_Reader_id, t1.DT,t1.eventid from daily_attendance_data t2 join trnevents t1
on t1.emp_reader_id=t2.emp_reader_id where (CONVERT(VARCHAR(26), t2.att_Date, 23) >=CONVERT(VARCHAR(26), '2018-10-20', 23)
and CONVERT(VARCHAR(26), t2.att_date, 23) <=CONVERT(VARCHAR(26), '2018-10-21', 23))
and
(t1.DT >=t2.in_time
and t1.DT <=t2.out_time)
-- and t1.emp_reader_id=1000
group by t1.emp_Reader_id,t1.dt,t1.eventid order by t1.emp_reader_id,DT asc
; With CheckIns
As (Select Rowemp_reader_id = Row_Number() Over (Partition by id, Cast(time_stamp As Date) Order By time_stamp),
id, time_stamp,
[Date] = Cast(time_stamp As Date),
[Time] = Cast(time_stamp As Time(0))
From @tempProcesstable)
Select Pvt.id,B.emp_name , [Date], CHECK1, CHECK2,Cast(dateadd(ss,datediff(ss,CHECK1,CHECK2),0) As Time(0)) Total1,
CHECK3, CHECK4,Cast(dateadd(ss,datediff(ss,CHECK3,CHECK4),0) As Time(0)) Total2
From (Select id, [Date], [Time],
CHECKNum = 'CHECK' + Cast(Rowemp_reader_id As varchar(11))
From CheckIns) As P
Pivot (Min([Time])
For CheckNum In (Check1, [Check2], Check3, Check4)
) As Pvt
LEFT OUTER JOIN
dbo.employee AS B ON Pvt.id= B.emp_reader_id LEFT OUTER JOIN
dbo.departments AS C ON B.dept_id = C.dept_id
Мой вывод:
id emp_name Date CHECK1 CHECK2 Total1 CHECK3 CHECK4 Total2
9999 Test 2018-10-21 08:00:00 NULL NULL NULL NULL NULL
9999 Test 2018-10-22 06:00:00 NULL NULL NULL NULL NULL
Мой ожидаемый результат:
id att_date Check1 Check2 Check3 Check4
9999 2018-10-21 08:00:00 06:00:00 NULL NULL
Если я разделю только по id, то получу ожидаемый результат, но не на все дни. Я застрял здесь, может кто-нибудь помочь разобраться в этом.