我有一個包含一系列(IP varchar(15),DateTime datetime2)值的表。每行對應於用戶所做的HTTP請求。我想分配會話號碼到這些行。不同的IP地址有不同的會話號碼。如果最後一個請求大於30分鐘,則應爲相同的IP分配一個新的會話編號。下面是一個示例輸出:SQL Server:通過超時分區的row_number
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'子句功能將有所幫助。 – 2012-04-08 18:37:19
是的,它是SQL Server 2012. – usr 2012-04-08 18:40:16