【发布时间】:2016-11-16 18:41:47
【问题描述】:
如果我们在 SQL Server 中有一个包含以下数据的表:
ID Log_Time
1110 2016-10-31 20:34:50.000
1110 2016-10-31 20:34:58.000
1110 2016-10-31 20:35:03.000
1110 2016-11-01 01:28:29.000
1110 2016-11-01 01:28:33.000
1110 2016-11-01 01:28:37.000
1110 2016-11-01 01:28:42.000
1110 2016-11-01 01:28:46.000
1110 2016-11-01 01:28:50.000
1110 2016-11-01 01:28:54.000
1110 2016-11-01 01:28:59.000
1110 2016-11-01 01:29:03.000
假设每个用户操作都会生成一个 log_time 条目。业务会计算会话数以进行此类计费 - 从会话 1 开始,对于每个日志活动,如果时间差超过一小时,则将会话计数增加 1。
这是一个具有不同用户 ID 的相当大的表。我尝试了一种游标组合,用于循环遍历不同的用户,并尝试通过逐行迭代会话计数来增加 WHILE LOOPS。完成需要很长时间,当这张表变大时,这甚至可能不是正确的方法。必须有更好的方法来做到这一点。有什么指点吗?
我需要的结果集是这样的:
ID SessionCount
1110 28
1145 42
1116 38
【问题讨论】:
标签: sql sql-server tsql sql-server-2012 gaps-and-islands