当能够登录到多个队列时计算登录系统的小时数
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()
在你的情况下几乎会增加一倍的时间,这不是你需要的,因为你只需要计算一次时间。
我们的代理可以全天登录 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()
在你的情况下几乎会增加一倍的时间,这不是你需要的,因为你只需要计算一次时间。