如果我们在 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
您应该使用该
LAG()
函数将值与上一行进行比较。它可以这样实现:您还可以添加
1900-01-01
(或类似的旧时间戳)作为 LAG: 的默认值,LAG(Log_Time, 1, '19000101')
并删除条件Or PreviousTime Is Null
中的IIF
。