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

Откуда:
Сообщений: 134
Добрый день!

Есть таблица учета рабочего времени, in соответственно пришел, out ушел
create table tt (event date not null, type varchar2(3 char) not null);

insert into tt values(to_date('01-12-2016 10:50', 'dd-mm-yyyy hh24:mi'), 'in');
insert into tt values(to_date('01-12-2016 11:20', 'dd-mm-yyyy hh24:mi'), 'out');
insert into tt values(to_date('01-12-2016 12:00', 'dd-mm-yyyy hh24:mi'), 'in');
insert into tt values(to_date('01-12-2016 14:15', 'dd-mm-yyyy hh24:mi'), 'out');

Тут у нас получается человек находился на месте в сумме 2:45

Подскажите, как правильно сделать запрос такое запрос?

Самое неприятное, что in может не всегда присутствовать, тогда надо пропустить промежуточный out, например, если тут не будет третий записи (12:00), то нужно считать разницу между 10:50 и 14:15 ... но это уже как-то совсем жестко, и мне достаточно хотя бы первое условие ...

Заранее благодарен за любую помощь!
19 дек 16, 12:22    [20021068]     Ответить | Цитировать Сообщить модератору
 Re: Последовательный подсчет разницы времени  [new]
Добрый Э - Эх
Guest
Vargant,

lead/lag
19 дек 16, 12:25    [20021083]     Ответить | Цитировать Сообщить модератору
 Re: Последовательный подсчет разницы времени  [new]
mRdUKE
Member

Откуда: ТЛТ
Сообщений: 494
Vargant
Самое неприятное, что in может не всегда присутствовать, тогда надо пропустить промежуточный out..
Т.е. «выход» у Вас как правило через «дверь», а вот «входят» по-разному? Что хотите подсчитать, «находился на месте» за день, за период? Войти могли вчера – выйти сегодня? Могли два раза (или больше) подряд войти или выйти, всё учли?
19 дек 16, 12:36    [20021132]     Ответить | Цитировать Сообщить модератору
 Re: Последовательный подсчет разницы времени  [new]
XMLer
Member

Откуда:
Сообщений: 258
Vargant

Подскажите, как правильно сделать запрос такое запрос?


всю бизнес-логику вынеси на уровень трансформации данных, сделав табличку, в которой out строго после in, добавленные фиктивные out-in для перехода через 0 часов.
А дальше lead/lag
19 дек 16, 13:32    [20021570]     Ответить | Цитировать Сообщить модератору
 Re: Последовательный подсчет разницы времени  [new]
Vargant
Member

Откуда:
Сообщений: 134
mRdUKE
Т.е. «выход» у Вас как правило через «дверь», а вот «входят» по-разному? Что хотите подсчитать, «находился на месте» за день, за период? Войти могли вчера – выйти сегодня? Могли два раза (или больше) подряд войти или выйти, всё учли?

Да, все эти кейсы нужно решить, и два входа подряд, или два выхода ... выход после 23:59 не учитывается и считается, что человек ушел в 23-59 ... бывает и выхода то нет, тогда считаем, что ушел в 19-00 ...
19 дек 16, 13:38    [20021614]     Ответить | Цитировать Сообщить модератору
 Re: Последовательный подсчет разницы времени  [new]
Vargant
Member

Откуда:
Сообщений: 134
XMLer
Vargant
Подскажите, как правильно сделать запрос такое запрос?


всю бизнес-логику вынеси на уровень трансформации данных, сделав табличку, в которой out строго после in, добавленные фиктивные out-in для перехода через 0 часов.
А дальше lead/lag

вот я уже склоняюсь к этому, т.к. просто нереально много кейсов ...
19 дек 16, 13:38    [20021618]     Ответить | Цитировать Сообщить модератору
 Re: Последовательный подсчет разницы времени  [new]
Vint
Member

Откуда: Москва
Сообщений: 4564
Vargant,
ну городи огород. тебе уже все сказали. сиди пробуй. lead/lag+case и отсечь на следующем шаге там где нулл.
19 дек 16, 13:47    [20021676]     Ответить | Цитировать Сообщить модератору
 Re: Последовательный подсчет разницы времени  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
Vargant
..
Самое неприятное
..

насколько понимаю, у вас имеются проблемы с оборудованием (весьма вероятно, с аппаратной составляющей).
если это так, то анализ данных не имеет смысла до их (проблем) устранения
19 дек 16, 15:26    [20022629]     Ответить | Цитировать Сообщить модератору
 Re: Последовательный подсчет разницы времени  [new]
Не всё можно починить
Guest
orawish
насколько понимаю, у вас имеются проблемы с оборудованием
Это те проблемы, когда один открывает дверь и пятеро проходят :)
Такое аппаратно устраняется, но задорого - надо двери менять на турникеты
19 дек 16, 15:51    [20022809]     Ответить | Цитировать Сообщить модератору
 Re: Последовательный подсчет разницы времени  [new]
env
Member

Откуда: Россия, Москва
Сообщений: 6712
Не всё можно починить,

Или поставить примата с дубиной у двери
19 дек 16, 16:18    [20023041]     Ответить | Цитировать Сообщить модератору
 Re: Последовательный подсчет разницы времени  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
Не всё можно починить
orawish
насколько понимаю, у вас имеются проблемы с оборудованием
Это те проблемы, когда один открывает дверь и пятеро проходят :)
Такое аппаратно устраняется, но задорого - надо двери менять на турникеты

ага, ага, причем на такие турникеты,
у которых вероятность нефиксации события процентов не ~0.5 , а ~15
19 дек 16, 16:23    [20023072]     Ответить | Цитировать Сообщить модератору
 Re: Последовательный подсчет разницы времени  [new]
stax..
Guest
Vargant,
надо разобратся с отсутствующими записями

напр
insert into tt values(to_date('01-12-2016 10:50', 'dd-mm-yyyy hh24:mi'), 'in');
insert into tt values(to_date('01-12-2016 17:20', 'dd-mm-yyyy hh24:mi'), 'out');
а оказывается что нет
insert into tt values(to_date('01-12-2016 11:20', 'dd-mm-yyyy hh24:mi'), 'out');
insert into tt values(to_date('01-12-2016 14:00', 'dd-mm-yyyy hh24:mi'), 'in');
как тогда?

сначала надо добітся пар in/out, тогда уже просто

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

ps
задача упрощается если чел не может работать через 24:00

зии
на форуме 100% было
20 дек 16, 15:59    [20027874]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить