当能够登录到多个队列时计算登录系统的小时数

Calculating hours logged into system when able to login to multiple queues

我们的代理可以全天登录 phone 系统,他们可以登录和退出分配给他们的多个队列。

这对我试图计算他们当天登录系统的总时间造成了问题。

这是为代理拉的一天。

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 个队列添加了时间,但随后为他们登录到第四个队列时重新添加了一部分时间。

顶部的第一个 table 是我在这个 table 中拥有的所有信息。甚至不需要第三行,因为第二行已经涵盖了所有时间。

詹姆斯,

您所拥有的是一个设计不佳的示例,因为您的数据缺少有关会话标识符的信息,该信息可能会成为 GROUP BY 语句的潜在列。

您的解决方案取决于同时启动和完成所有这些队列。如果您希望它仍然被组合在一起,您必须允许分钟(截断)的微小差异以形成一个清晰的组,但那将是错误的。 不过我不推荐这样做。

This creates an issue for me trying to calculate the total time they are logged into the system for the day.

我已经在上面引用了你的需求,我认为这是你的问题。

根据您的数据做出的假设:

  • 当代理注销时,他将从他当前登录的每个队列中注销

这意味着您可以采用当前语句并对其进行扩展以获得所需内容。您只需要按 endtime 再次对数据进行分组,以便在当前输出中第 2 行和第 3 行合并为 1 行,保留准确的开始(最小 - 登录操作)和结束(最大 - 注销操作)时间.至于 timecalculated 你只对较高的值感兴趣,因为它包含较小的值,因此 select.

中的 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() 在你的情况下几乎会增加一倍的时间,这不是你需要的,因为你只需要计算一次时间。