2008-10-31 3 views
1

У меня есть запрос, где у меня есть столбец даты (время), который говорит о «IN» & «OUT» сроках присутствия людей этой одной колонкойКак разделить даты столбца и подвести итог

Моих запросов являются: -

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

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

+0

Почему у вас есть оба раза в одной колонке? Какой формат? – chills42 2008-10-31 11:51:47

+0

Да, вам нужно знать формат/тип данных столбца «время», чтобы написать запрос. – 2008-10-31 11:57:41

ответ

0
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 
0

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

SELECT Datepart(hour, dateTimeEnd - dateTimeStart) 

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

1

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

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 
Смежные вопросы