Alexeytur
@Alexeytur

Получение времени нахождения в помещении по логам входов/выходов?

Добрый день.
Имеется таблица с логом входов/выходов сотрудников в помещение:
trans_date    timestamp
user_id       integer
trans_type    integer -- 0=вход, 1=выход


Мне нужно найти суммарное время нахождения заданного сотрудника в помещении в определенный день.
Можно ли обойтись обычным запросом или нужно писать процедуру?
  • Вопрос задан
  • 131 просмотр
Пригласить эксперта
Ответы на вопрос 2
@ponaehal
Подозреваю что нужно усложнить задачу: Некоторые сотрудники могут отметиться на вход, но не отметиться на выход (по ошибке выйти с кем-нибудь за компанию) и наоборот... да?
и да, в любом случае можно обойтись одним запросом.
Ответ написан
@d-stream
Готовые решения - не подаю, но...
Самый примитивный вариант:
оконными функциями вычисляем дельту между соседними событиями (например в минутах или секундах)

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

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

сходный, но чуть более удобный в плане выявления вариант - pivot'ом раскладываем отметки времени на две колонки, а далее как в первом варианте - дельты (только уже имея возможность фильтровать вышел-зашел)

p.s. из практики - совершенно бесперспективный путь, если на входе не стоит шлюз-мельница под надзором двух суровых вохровцев.

Более перспективный вариант - можно предложить по более подробному описанию исходной задачи/проблемы
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы