Я пытаюсь запустить SQL-запрос в нашей базе данных дверных систем, чтобы узнать, в какое время все приходят на работу. На данный момент я имею только с помощью оператораSQL-запрос для поиска первого события дня
Where DATEPART(hh, ev.dEvent_Date) between '5' and '10'
, чтобы ограничить результаты между 5 утра и 10 утра, но Джон Смит, возможно, вышел на улицу, чтобы получить что-то или на перерыв, так что отчет будет иметь несколько записей для person сверху один день. Есть ли способ, которым я могу получить первое событие для каждого каждый день? Мой текущий запрос ниже
Select tFirstName as FirstName
,tLastName as LastName
,DATENAME(dw, ev.dEvent_Date) as [Day]
,CONVERT(varChar(11),ev.dEvent_Date) as [Date]
,CONVERT(varchar(2) ,DatePart(hh,devent_Date))+':'+ case when len(convert(varchar(5),DatePart(n,devent_Date))) = '1' then '0'+ convert(varchar(5),DatePart(n,devent_Date))else convert(varchar(5),DatePart(n,devent_Date)) end as [Time]
From dbo.tblevents as ev, dbo.tblEmployees as em
Where DATEPART(hh, ev.dEvent_Date) between '5' and '10'
AND ev.dEvent_Date between DATEADD(dd, -(DATEPART(dw, DATEADD(ww, -1, getdate()))-1), DATEADD(ww, -1, getdate())) and DATEADD(dd, 7-(DATEPART(dw, DATEADD(ww, -1, getdate()))), DATEADD(ww, -1, getdate()))
And em.iEmployeeNum = ev.iUserNum
AND tByte6 = 11
AND tByte8 = 22
Order by LastName, [Date]
Я не понимаю, почему вы не можете просто используйте 'MIN (время)' и агрегируйте по 'DAY'? – Kermit