Нужна помощь в запросе SQL - PullRequest
3 голосов
/ 28 июля 2011

У меня есть следующие записи в таблице базы данных InOut

AutoId EmployeeId LogTime
1      1          12:24 PM
2      5          12:26 PM
3      1          12:27 PM
4      1          12:28 PM
5      5          12:31 PM

и так далее ...

Нет в моем отчете. Я хочу учесть, что сначала (Нечетная запись для сотрудника - вовремя), а Четная запись для того же сотрудника - вне времени.

Короче говоря, я хочу следующий вывод

EmployeeId  InTime   OutTime
1           12:24 PM 12:27 PM
1           12:28 PM ---
5           12:26 PM 12:31 PM

так как я могу достичь этого результата ??

1 Ответ

4 голосов
/ 28 июля 2011

Это будет делать то, что вы хотите, но если есть несоответствие между событиями входа и выхода, у вас будет неправильный результат. У вас должен быть какой-то способ узнать, является ли это событие входом в систему или выходом из системы.

;with cte as
( 
  select EmployeeId,
         LogTime,
         row_number() over(partition by EmployeeId order by LogTime) as rn
  from @T
)
select C1.EmployeeId,
       C1.LogTime as InTime,
       C2.LogTime as OutTime
from cte as C1
  left outer join cte as C2
    on C1.EmployeeId = C2.EmployeeId and
       C1.rn + 1 = C2.rn
where C1.rn % 2 = 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...