Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Помогите с запросом  [new]
yuri7811
Member

Откуда:
Сообщений: 19
В таблицу (учета рабочего времени) , формата (WorkNr, Date_Time , In_Out) постоянно записывается новые строки с рабочими номерами, временем прихода\ухода, и операцией (приход - 1 \ уход- 2).

Как можно запросом получить список рабочих в данный момент находящихся на работе ?
31 янв 18, 00:10    [21152856]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Andy_OLAP
Member

Откуда: я знаю, что Хапоэль Беэр-Шева - чемпион
Сообщений: 3151
yuri7811
В таблицу (учета рабочего времени) , формата (WorkNr, Date_Time , In_Out) постоянно записывается новые строки с рабочими номерами, временем прихода\ухода, и операцией (приход - 1 \ уход- 2).

Как можно запросом получить список рабочих в данный момент находящихся на работе ?

Для любого WorkNr Вы должны получить максимальную дату Date_Time для In_Out=1 это приход и для In_Out=2 это уход. Если максимальная дата первая больше второй - человек вчера пришел и ушел, а сегодня только пришел и еще не уходил. Следовательно, он на работе. И не важно, сколько раз он приходил/уходил, эти события могут не "биться" на пары, счетчики не работают из-за отключения электричества, к примеру. Если приход был вчера, позавчера, позапозавчера, а уход сегодня - его нет. И если вчера приход был, а уход позавчера, позапозавчера и так далее, в общем, время прихода больше - значит, он со вчера еще на работе сидит.
31 янв 18, 00:37    [21152889]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Andy_OLAP
Member

Откуда: я знаю, что Хапоэль Беэр-Шева - чемпион
Сообщений: 3151
yuri7811
В таблицу (учета рабочего времени) , формата (WorkNr, Date_Time , In_Out) постоянно записывается новые строки с рабочими номерами, временем прихода\ухода, и операцией (приход - 1 \ уход- 2).

Как можно запросом получить список рабочих в данный момент находящихся на работе ?

Возможно, такой запрос некошерный и его нужно подрихтовать напильником, но что есть.
select
tt.WorkNr
(
select t1.WorkNr
,(select max(t2.Date_Time) from my_table t2 where t2.WorkNr = t1.WorkNr and t2.In_Out = 1) as [last_Prihod]
,(select max(t3.Date_Time) from my_table t3 where t3.WorkNr = t1.WorkNr and t3.In_Out = 0) as [last_Uhod]
from my_table t1
group by t1.WorkNr
) tt
where datediff(ms,[last_Uhod],[last_Prihod])>0
31 янв 18, 00:43    [21152892]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Andy_OLAP
Member

Откуда: я знаю, что Хапоэль Беэр-Шева - чемпион
Сообщений: 3151
Andy_OLAP,

In_Out = 2 для ухода, конечно же.
31 янв 18, 00:44    [21152893]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
yuri7811
Member

Откуда:
Сообщений: 19
спасибо за помощь завтра попробую
31 янв 18, 01:40    [21152930]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить