【发布时间】:2012-04-21 08:16:39
【问题描述】:
我有一个包含一系列 (IP varchar(15), DateTime datetime2) 值的表。每行对应一个用户发出的 HTTP 请求。我想为这些行分配会话编号。不同的 IP 地址有不同的会话号。 如果最后一次请求超过 30 分钟,则应为同一 IP 分配一个新的会话号。这是一个示例输出:
IP, DateTime, SessionNumber, RequestNumber
1.1.1.1, 2012-01-01 00:01, 1, 1
1.1.1.1, 2012-01-01 00:02, 1, 2
1.1.1.1, 2012-01-01 00:03, 1, 3
1.1.1.2, 2012-01-01 00:04, 2, 1 --different IP => new session number
1.1.1.2, 2012-01-01 00:05, 2, 2
1.1.1.2, 2012-01-01 00:40, 3, 1 --same IP, but last request 35min ago (> 30min)
第 1 列和第 2 列是输入,第 3 和第 4 列是所需的输出。该表显示了两个用户。
由于底层表确实很大,如何有效解决此问题?我希望对数据进行少量恒定的传递(一到两次)。
【问题讨论】:
-
什么版本的 SQL Server?如果 2012 年新的
OVER子句功能会有所帮助。
标签: sql-server tsql sql-server-2012 olap row-number