Как разбить столбец даты и подвести его итог - PullRequest
1 голос
/ 31 октября 2008

У меня есть запрос, в котором у меня есть столбец даты (время), в котором указывается "IN" и "OUT" время посещения людьми этого единственного столбца

Мои запросы: -

1) Как получить ежедневную посещаемость каждого сотрудника 2) Как узнать, присутствует ли работник менее 5 часов

Пожалуйста, дайте мне знать запросы на сервере SQL.

Ответы [ 3 ]

1 голос
/ 31 октября 2008

Вам необходимо сгруппировать запрос по пользователю и элементам за определенный день, а затем сравнить максимальные и минимальные значения, например,

declare @users table (
    UserId int, 
    DateColumn datetime
)

insert into @users values (1, '2008-10-31 15:15') 
insert into @users values (1, '2008-10-31 10:30') 
insert into @users values (1, '2008-10-30 16:15') 
insert into @users values (1, '2008-10-30 10:30') 

select
  UserID
  , cast(dt as datetime) dt
  , [in]
  , [out]
  , case when datepart(hour, [out]-[in]) >= 5 then 'yes' else 'no' end [5Hours?], 
  ,  cast(datediff(minute, [in], [out]) as float)/60 [hours] 
from (
  select
    UserID
    , convert(varchar, DateColumn, 112) dt
    , min(DateColumn) [in]
    , max(DateColumn) [out] 
  from @users 
  group by 
    UserID, convert(varchar, DateColumn, 112) 
    ) a 
0 голосов
/ 31 октября 2008

Чтобы найти разницу между двумя датами, вы можете использовать следующее:

SELECT Datepart(hour, dateTimeEnd - dateTimeStart)

Функция DatePart возвращает часть переменной времени и даты, а dateTimeEnd - dateTimeStart возвращает разницу между двумя датами в виде нового DateTime

0 голосов
/ 31 октября 2008
   select 
      datediff(minute, TimeFrom, TimeTo) as AttendedTimeInMinutes,
      case when datediff(minute, sTimeFrom, sTimeTo) < 5 * 60 
         then 
          'less than 5 hours' 
         else '5 hours or more' 
      end
   from YourTable
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...