Мне нужно рассчитать время между двумя датами; проблема в том, что у меня есть данные x-person в двух строках, начиная с дня 1 в момент времени x и заканчивая днем 2 в момент времени x, и снова начинаю день 2 во время x до дня 3 в момент времени x ...
Итак, мне нужно определить продолжительность каждого человека в день.
Надеюсь, вы, ребята, можете мне помочь !!!
Заранее спасибо.
Я пробовал некоторые варианты, но не могу получить нужный результат.
-- Table example
DECLARE @tbl TABLE(person varchar(10), startDate DATE, startTime TIME(0), endDate DATE, endTime TIME(0))
INSERT INTO @tbl
SELECT 'PERSON A' person, '2019-06-06' startDate, '02:14:00' startTime, '2019-06-06' endDate, '06:00:00' endTime
INSERT INTO @tbl
SELECT 'PERSON A' person, '2019-06-06' startDate, '22:00:00' startTime, '2019-06-07' endDate, '06:00:00' endTime
SELECT * FROM @tbl -- > This would be the table example
Ожидаемый результат будет
First_Row = (2019-06-06 06:00:00 - 2019-06-06 02:14:00) => 03: 46: 00
Second_RowA = (2019-06-06 22:00:00 - 2019-06-06 24:00:00) => 02: 00: 00
Second_RowB = (2019-06-07 02:14:00 - 2019-06-07 00:00:00) => 02:14:00, поскольку оставшееся время вычисляется по первой строке между
Итак, в конечном итоге результат будет:
First_Row + Second_RowA + SecondRowB = 08: 00: 00
UPDATE:
Ответ не сработал для того, что мне нужно сделать, но я знаю, что вопрос немного сложен (извините, мой английский не очень хорош), я попытаюсь объяснить лучше, поэтому здесь я иду:
У меня есть данные для входа в систему и выхода из системы операторов колл-центра, эти агенты имеют рабочую смену с 22 на 06, поэтому мне нужно вычислить минимальное значение loginTime и максимальное значение logOutTime, но здесь все становится сложным, поскольку существуют случаи, когда агент отключается в течение этого периода времени, в тот же день, когда начинается другая смена, в базе данных создается другое событие входа в систему и т. д.
Итак, мой вопрос: как я могу определить минимальные и максимальные значения, которые мне нужны, чтобы отображаться только один раз для агента и для даты?
Вот данные:
DECLARE @tbl TABLE(agentId VARCHAR(10), position VARCHAR(10), loginDate DATE, loginTime TIME(0), logoutDate DATE, logoutTime TIME(0))
INSERT INTO @tbl SELECT '311338', '230025', '2019-06-03', '21:59:00', '2019-06-04', '06:00:00'
INSERT INTO @tbl SELECT '311338', '230025', '2019-06-04', '21:59:00', '2019-06-04', '23:30:00'
INSERT INTO @tbl SELECT '311338', '230025', '2019-06-04', '23:31:00', '2019-06-05', '06:01:00'
INSERT INTO @tbl SELECT '311338', '230038', '2019-06-05', '21:59:00', '2019-06-06', '02:13:00'
INSERT INTO @tbl SELECT '311338', '230038', '2019-06-06', '02:14:00', '2019-06-06', '06:00:00'
INSERT INTO @tbl SELECT '311338', '230037', '2019-06-06', '22:00:00', '2019-06-07', '06:00:00'
INSERT INTO @tbl SELECT '311338', '230038', '2019-06-07', '21:59:00', '2019-06-08', '00:53:00'
INSERT INTO @tbl SELECT '311338', '230038', '2019-06-08', '00:53:00', '2019-06-08', '06:00:00'
INSERT INTO @tbl SELECT '311338', '230038', '2019-06-09', '22:00:00', '2019-06-10', '06:09:00'
SELECT agentId
,position
,(CAST(loginDate AS DATETIME) + CAST(loginTime AS DATETIME)) loginTime
,(CAST(logoutDate AS DATETIME) + CAST(logoutTime AS DATETIME)) logoutTime
FROM @tbl
Результат для agentId 311338 будет:
День 2019-05-06:
minLogin = 2019-06-05 21: 59: 00.000
maxLogout = 2019-06-06 06: 00: 00.000
День 2019-06-06:
minLogin = 2019-06-06 22: 00: 00.000
maxLogout = 2019-06-07 06: 00: 00.000
День 2019-06-07:
minLogin = 2019-06-07 21: 59: 00.000
maxLogout = 2019-06-08 06: 00: 00.000