2015-12-07 2 views
0

Наши агенты могут подключаться к телефонной системе в течение дня, когда они могут входить и выходить из нескольких назначенных им очередей.Расчет часов, зарегистрированных в системе при входе в несколько очередей

Это создает проблему для меня, пытаясь вычислить общее время, в которое они вошли в систему в течение дня.

Вот один день, проведенный для агента.

ID  USERID    GROUPID    STARTTIME     ENDTIME ts 
53265 7469291810335714 3466233807211157283 2015-11-23 15:01:30.0000000 2015-11-23 16:31:07.0000000 2015-11-23 16:31:08.0000000 
53264 7469291810335714 3466233806423685334 2015-11-23 15:01:30.0000000 2015-11-23 16:31:07.0000000 2015-11-23 16:31:08.0000000 
53263 7469291810335714 3466233806542064445 2015-11-23 15:01:30.0000000 2015-11-23 16:31:07.0000000 2015-11-23 16:31:08.0000000 
53262 7469291810335714 3466233807109235583 2015-11-23 15:01:30.0000000 2015-11-23 16:31:07.0000000 2015-11-23 16:31:08.0000000 
53293 7469291810335714 3466233806423685334 2015-11-23 16:38:27.0000000 2015-11-23 17:28:59.0000000 2015-11-23 17:28:59.0000000 
53292 7469291810335714 3466233806542064445 2015-11-23 16:38:27.0000000 2015-11-23 17:28:59.0000000 2015-11-23 17:28:59.0000000 
53291 7469291810335714 3466233807109235583 2015-11-23 16:38:27.0000000 2015-11-23 17:28:59.0000000 2015-11-23 17:28:59.0000000 
53296 7469291810335714 3466233807211157283 2015-11-23 16:40:24.0000000 2015-11-23 17:28:59.0000000 2015-11-23 17:28:59.0000000 
53303 7469291810335714 3466233807211157283 2015-11-23 17:46:22.0000000 2015-11-23 18:20:25.0000000 2015-11-23 18:20:26.0000000 
53302 7469291810335714 3466233806423685334 2015-11-23 17:46:22.0000000 2015-11-23 18:20:25.0000000 2015-11-23 18:20:25.0000000 
53301 7469291810335714 3466233806542064445 2015-11-23 17:46:22.0000000 2015-11-23 18:20:25.0000000 2015-11-23 18:20:25.0000000 
53300 7469291810335714 3466233807109235583 2015-11-23 17:46:22.0000000 2015-11-23 18:20:25.0000000 2015-11-23 18:20:25.0000000 
53312 7469291810335714 3466233807211157283 2015-11-23 18:21:11.0000000 2015-11-23 18:42:57.0000000 2015-11-23 18:42:57.0000000 
53311 7469291810335714 3466233806423685334 2015-11-23 18:21:11.0000000 2015-11-23 18:42:57.0000000 2015-11-23 18:42:57.0000000 
53310 7469291810335714 3466233806542064445 2015-11-23 18:21:11.0000000 2015-11-23 18:42:57.0000000 2015-11-23 18:42:57.0000000 
53309 7469291810335714 3466233807109235583 2015-11-23 18:21:11.0000000 2015-11-23 18:42:57.0000000 2015-11-23 18:42:57.0000000 
53319 7469291810335714 3466233807211157283 2015-11-23 18:46:29.0000000 2015-11-23 18:53:22.0000000 2015-11-23 18:53:22.0000000 
53318 7469291810335714 3466233806423685334 2015-11-23 18:46:29.0000000 2015-11-23 18:53:22.0000000 2015-11-23 18:53:22.0000000 
53317 7469291810335714 3466233806542064445 2015-11-23 18:46:29.0000000 2015-11-23 18:53:22.0000000 2015-11-23 18:53:22.0000000 
53316 7469291810335714 3466233807109235583 2015-11-23 18:46:29.0000000 2015-11-23 18:53:22.0000000 2015-11-23 18:53:22.0000000 
53321 7469291810335714 3466233807109235583 2015-11-23 18:54:23.0000000 2015-11-23 20:00:22.0000000 2015-11-23 20:00:22.0000000 
53324 7469291810335714 3466233807211157283 2015-11-23 18:54:23.0000000 2015-11-23 20:00:22.0000000 2015-11-23 20:00:22.0000000 
53323 7469291810335714 3466233806423685334 2015-11-23 18:54:23.0000000 2015-11-23 20:00:22.0000000 2015-11-23 20:00:22.0000000 
53322 7469291810335714 3466233806542064445 2015-11-23 18:54:23.0000000 2015-11-23 20:00:22.0000000 2015-11-23 20:00:22.0000000 
53338 7469291810335714 3466233807211157283 2015-11-23 20:34:04.0000000 2015-11-23 20:40:49.0000000 2015-11-23 20:40:49.0000000 
53337 7469291810335714 3466233806423685334 2015-11-23 20:34:04.0000000 2015-11-23 20:40:49.0000000 2015-11-23 20:40:49.0000000 
53336 7469291810335714 3466233806542064445 2015-11-23 20:34:04.0000000 2015-11-23 20:40:49.0000000 2015-11-23 20:40:49.0000000 
53335 7469291810335714 3466233807109235583 2015-11-23 20:34:04.0000000 2015-11-23 20:40:49.0000000 2015-11-23 20:40:49.0000000 
53343 7469291810335714 3466233807211157283 2015-11-23 20:42:56.0000000 2015-11-23 21:52:17.0000000 2015-11-23 21:52:17.0000000 
53342 7469291810335714 3466233806423685334 2015-11-23 20:42:56.0000000 2015-11-23 21:52:17.0000000 2015-11-23 21:52:17.0000000 
53341 7469291810335714 3466233806542064445 2015-11-23 20:42:56.0000000 2015-11-23 21:52:17.0000000 2015-11-23 21:52:17.0000000 
53340 7469291810335714 3466233807109235583 2015-11-23 20:42:56.0000000 2015-11-23 21:52:17.0000000 2015-11-23 21:52:17.0000000 
53364 7469291810335714 3466233807211157283 2015-11-23 21:55:55.0000000 2015-11-23 21:58:31.0000000 2015-11-23 21:58:31.0000000 
53363 7469291810335714 3466233806423685334 2015-11-23 21:55:55.0000000 2015-11-23 21:58:31.0000000 2015-11-23 21:58:31.0000000 
53362 7469291810335714 3466233806542064445 2015-11-23 21:55:55.0000000 2015-11-23 21:58:31.0000000 2015-11-23 21:58:31.0000000 
53361 7469291810335714 3466233807109235583 2015-11-23 21:55:55.0000000 2015-11-23 21:58:31.0000000 2015-11-23 21:58:31.0000000 
53371 7469291810335714 3466233807211157283 2015-11-23 22:07:21.0000000 2015-11-23 22:31:18.0000000 2015-11-23 22:31:18.0000000 
53370 7469291810335714 3466233806423685334 2015-11-23 22:07:21.0000000 2015-11-23 22:31:18.0000000 2015-11-23 22:31:18.0000000 
53369 7469291810335714 3466233806542064445 2015-11-23 22:07:21.0000000 2015-11-23 22:31:18.0000000 2015-11-23 22:31:18.0000000 
53368 7469291810335714 3466233807109235583 2015-11-23 22:07:21.0000000 2015-11-23 22:31:18.0000000 2015-11-23 22:31:18.0000000 
53381 7469291810335714 3466233807211157283 2015-11-23 22:46:58.0000000 2015-11-24 00:01:13.0000000 2015-11-24 00:01:13.0000000 
53380 7469291810335714 3466233806423685334 2015-11-23 22:46:58.0000000 2015-11-24 00:01:13.0000000 2015-11-24 00:01:13.0000000 
53379 7469291810335714 3466233806542064445 2015-11-23 22:46:58.0000000 2015-11-24 00:01:13.0000000 2015-11-24 00:01:13.0000000 
53378 7469291810335714 3466233807109235583 2015-11-23 22:46:58.0000000 2015-11-24 00:01:13.0000000 2015-11-24 00:01:13.0000000 

Как мы можем видеть, первые четыре строки довольно прямолинейны. Они вошли в четыре разные очереди в одно и то же время и вышли в одно и то же время.

Но в следующий раз, когда вы вошли в систему (следующий набор из 4 строк), они вошли в три отдельные очереди, а затем через пару минут вошли в четвертую очередь.

Это затрудняет правильное вычисление времени, поскольку каждый запрос, который я попробовал, неправильно добавил на этот раз.

Мой главный запрос, чтобы захватить все данные:

select * 
from ##agentlogin 
where userid = '7469291810335714' 
and starttime between @monday_start_datetime and @monday_end_datetime 

Этот запрос как можно ближе к совершенству, как я могу получить его, но это неправильно добавляет, что время для четвертой очереди.

select userid, endtime, min(starttime), max(endtime), datediff(ss, starttime, endtime) 
    from ##agentlogin 
    where userid = '7469291810335714' 
    and starttime between @monday_start_datetime and @monday_end_datetime 
    group by userid, endtime, starttime 



userid    endtime      (No column name)   (No column name) (No column name) 
7469291810335714 2015-11-23 16:31:07.0000000 2015-11-23 15:01:30.0000000 2015-11-23 16:31:07.0000000 5377 
7469291810335714 2015-11-23 17:28:59.0000000 2015-11-23 16:38:27.0000000 2015-11-23 17:28:59.0000000 3032 
7469291810335714 2015-11-23 17:28:59.0000000 2015-11-23 16:40:24.0000000 2015-11-23 17:28:59.0000000 2915 
7469291810335714 2015-11-23 18:20:25.0000000 2015-11-23 17:46:22.0000000 2015-11-23 18:20:25.0000000 2043 
7469291810335714 2015-11-23 18:42:57.0000000 2015-11-23 18:21:11.0000000 2015-11-23 18:42:57.0000000 1306 
7469291810335714 2015-11-23 18:53:22.0000000 2015-11-23 18:46:29.0000000 2015-11-23 18:53:22.0000000 413 
7469291810335714 2015-11-23 20:00:22.0000000 2015-11-23 18:54:23.0000000 2015-11-23 20:00:22.0000000 3959 
7469291810335714 2015-11-23 20:40:49.0000000 2015-11-23 20:34:04.0000000 2015-11-23 20:40:49.0000000 405 
7469291810335714 2015-11-23 21:52:17.0000000 2015-11-23 20:42:56.0000000 2015-11-23 21:52:17.0000000 4161 
7469291810335714 2015-11-23 21:58:31.0000000 2015-11-23 21:55:55.0000000 2015-11-23 21:58:31.0000000 156 
7469291810335714 2015-11-23 22:31:18.0000000 2015-11-23 22:07:21.0000000 2015-11-23 22:31:18.0000000 1437 
7469291810335714 2015-11-24 00:01:13.0000000 2015-11-23 22:46:58.0000000 2015-11-24 00:01:13.0000000 4455 

Как вы можете видеть в приведенном выше во второй строке это правильно добавляет время в течение первых 3-х очередей, но затем снова добавляет часть этого времени для того, когда они вошли в четвертую очередь.

Первая таблица наверху - это вся информация, которую я имею в этой таблице. Третья строка даже не нужна, так как строка 2 охватывает все это время уже.

+0

Вы ищете единственную стоимость времени, зарегистрированного в течение дня? – gmiley

+0

Я подготовил свой ответ. Он готов для вашего обзора. Сообщите мне, помогло это или нет. –

+0

@gmiley да, это конечная цель. –

ответ

2

Джеймс,

Что у вас есть пример плохого дизайна, поскольку ваши данные пропускает информацию о идентификатор сеанса, который может сделать потенциальный столбец для GROUP BY заявления.

Ваше решение зависит от всех запущенных и завершаемых очередей одновременно. Если вы хотите, чтобы все еще было сгруппировано, вы должны были бы разрешить небольшие различия в минутах (усечение), чтобы создать четкую группу, но это было бы ошибочным. Я бы не рекомендовал этого.

Это создает проблему для меня, пытаясь рассчитать общее время их входа в систему в течение дня.

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

Успенских из ваших данных:

  • Когда агент loggs, что он регистрирует из каждой очереди он вошедший в

Это будет означать, что вы можете взять ваше текущее заявление и продлить его чтобы получить то, что вам нужно.Вам просто нужно снова группировать свои данные на endtime, чтобы в вашем текущем выводе строка 2 и строка 3 сливались в 1 строку, сохраняя точный старт (минимум - вход в систему) и заканчивая (максимальное время выхода). Что касается timecalculated, вас интересует только старшее, так как оно содержит меньшее, таким образом, max(timecalculated) в избранном.

select 
    foo.userid, min(startmin) startmin, max(endmax) endmax, max(timecalculated) timecalculated 
from (
    select  userid, endtime, min(starttime) startmin, max(endtime) endmax, datediff(ss, starttime, endtime) timecalculated 
    from  ##agentlogin 
    where  userid = '7469291810335714' and starttime between @monday_start_datetime and @monday_end_datetime 
    group by userid, endtime, starttime 
    ) foo 
group by foo.userid, foo.endtime 

sum() будет почти в два раза время, в вашем случае, который не то, что вам нужно, так как вы должны рассчитывать только время один раз.

+0

Я скопировал это для теста, и это дает мне ошибку. Конец «endtime» был указан многократно для «foo». Мне еще не удалось обойти это. –

+0

Я тоже согласен с плохим дизайном, это программное обеспечение сторонних разработчиков, к сожалению и вне моего контроля. –

+1

@JamesWilson 'starttime' и' endtime' имеют прямой доступ и псевдонимы в подзапросе. Вы можете переименовать максимальное время начала и окончания как «startmax» и «endmax», просто убедитесь, что в других местах, которые вы намереваетесь использовать максимальные, также исправьте эти ссылки. – gmiley

Смежные вопросы