В задаче требовалось по данным записи событий входа и выхода на разных дверях предприятия определить периоды работы сотрудника. Дополнительно считается, что если человек в течении 6 часов отсутсвует на территории - то он ушел домой и данный рабочий "день" для него закончен.
В задаче требовалось по данным записи событий входа и выхода на разных дверях предприятия определить периоды работы сотрудника. Дополнительно считается, что если человек в течении 6 часов отсутствует на территории - то он ушел домой и данный рабочий "день" для него закончен.
ВЫБРАТЬ
ДОБАВИТЬКДАТЕ(ПроходыСигур.Период, СЕКУНДА, РАЗНОСТЬДАТ(ДАТАВРЕМЯ(1, 1, 1), ПроходыСигур.Время, СЕКУНДА)) КАК Дата,
ПроходыСигур.Сотрудник
ПОМЕСТИТЬ Дано
ИЗ
ПроходыСигур КАК ПроходыСигур
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
МАКСИМУМ(Раньше.Дата) КАК От,
Дано.Дата КАК До,
Дано.Сотрудник
ПОМЕСТИТЬ Отсутствия
ИЗ
Дано КАК Раньше
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Дано КАК Дано
ПО Раньше.Сотрудник = Дано.Сотрудник
И Раньше.Дата < Дано.Дата
СГРУППИРОВАТЬ ПО
Дано.Сотрудник,
Дано.Дата
ИМЕЮЩИЕ
РАЗНОСТЬДАТ(МАКСИМУМ(Раньше.Дата), Дано.Дата, ЧАС) > 6
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ РАЗЛИЧНЫЕ
&ДатаНачала,
&ДатаНачала,
ПроходыСигур.Сотрудник
ИЗ
ПроходыСигур КАК ПроходыСигур
ОБЪЕДИНИТЬ
ВЫБРАТЬ РАЗЛИЧНЫЕ
&ДатаОкончания,
&ДатаОкончания,
ПроходыСигур.Сотрудник
ИЗ
ПроходыСигур КАК ПроходыСигур
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
МАКСИМУМ(Раньше.До) КАК От,
Отсутствия.От КАК До,
Отсутствия.Сотрудник
ИЗ
Отсутствия КАК Отсутствия
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Отсутствия КАК Раньше
ПО Отсутствия.Сотрудник = Раньше.Сотрудник И Раньше.До < Отсутствия.От
СГРУППИРОВАТЬ ПО
Отсутствия.От,
Отсутствия.Сотрудник
Эта задача тоже относится к классу "Islands and Gaps". В запросе сначала определяются все отсутствия сотрудника, а затем периоды между отсутствиями считаются периодами работы.
Отсутствиями считаются все периоды неактивности длиннее шести часов.
То есть предлагается вообще отказаться от анализа типов событий: вход, выход, так как непонятно внешние ли это двери и всегда ли срабатывает регистрация. Любое событие считается активностью. Время соединяется с датой. Это важно для круглосуточности.
Если все же двери строго внешние и жалко терять информацию о типе события, то "математически" правильно будет разделять последовательные вход-вход или выход-выход противоположным событием, расположенным строго посередине интервала равновероятности времени. В среднем это будет сводить к минимуму ошибку домысливания пропущенного при регистрации события.
Автор: ildarovich
Орфографическая ошибка в отсутсвует: отсутсвует Орфографическая ошибка в ПроходыСигур (найдено 11): Сигур Орфографическая ошибка в неактивности: неактивности Орфографическая ошибка в круглосуточности: круглосуточности Орфографическая ошибка в равновероятности: равновероятности Орфографическая ошибка в домысливания: домысливания
Срез на даты за период. Шаблон запроса
ШаблонТекстаЗапросаОпределенияБлижайшихДатПоГрафикуРаботы (БСП)
Нахождение интервалов в запросе
Получить даты за период в запросе
ПодключитьТестовыйПериод (БСП)
ПодключениеТестовыхПериодов_ПроверитьСостояниеЗапроса (БСП)