Ich habe eine Tabelle mit einer Reihe von (IP varchar (15), Datetime datetime2) Werte. Jede Zeile entspricht einer HTTP-Anfrage eines Benutzers. Ich möchte Sitzungsnummern diesen Zeilen zuweisen. Unterschiedliche IP-Adressen haben unterschiedliche Sitzungsnummern. Der gleichen IP-Adresse sollte eine neue Sitzungsnummer zugewiesen werden, wenn die letzte Anfrage älter als 30 Minuten ist. Hier ist ein Beispiel-Ausgang:SQL Server: row_number durch Timeout partitioniert
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)
Spalten 1 und 2 sind Eingänge, 3 und 4 sind die gewünschten Ausgänge. Die Tabelle zeigt zwei Benutzer.
Da der zugrunde liegende Tabelle ist wirklich groß, Wie kann dies effizient gelöst werden? Ich würde eine kleine konstante Anzahl von Durchläufen über die Daten bevorzugen (ein oder zwei).
Welche Version von SQL Server? Wenn 2012, wird die neue "OVER" -Klauselfunktionalität helfen. –
Ja, es ist SQL Server 2012. – usr