В общем самый простой вариант что я придумал это записывать дату в виде числа (unix time) А начальную и конечную дату периодов тоже в этом же формате. Суммируем между собой все статусы с 1 и отдельно все статусы с 0 Сумму вторых вычитаем из суммы первых и получаем время в секундах
Тебе надо сначала выделить последовательные интервалы работы человека. Это не реляционная задача в принципе. Решается в СУБД курсором с пробегом по таблице по порядку времени. Это за О(n ). Запросом это тоже можно, но будет за О(n*n) нет смысла делать
Что означает "выделить последовательные интервалы работы человека"?У меня есть грубо говоря кнопка на IP телефоне которую сотрудник нажимает и начинает работу. В это время я могу что то записать в базу
Вот это вот —нереляционные данные. Потому что по определению таблица - это набор записей, для которых не установлен порядок.
Поэтому обрабатывать такие даные средствами реляционной СУБД будет очень хреново — тебе надо будет восстанавливать всегда этот порядок записей. Это достаточно сложно в вычислительном плане - квадрат или линейно-логарифмическая стоимость.
Можно при вставке таймастампа проверять, какая была последняя запись для этого пользователя. Если START, то для END записи прописывать айди оригинальной START записи. Потом джойшнишь просто таблицу саму на себя и получаешь интервалы.