Alternative für die LEAD-LAG-Funktion in SQL Server 2008
In SQL Server 2008 stellt die Unfähigkeit, LEAD- und LAG-Funktionen zu verwenden, beim Vergleich eine Herausforderung dar aktuelle Zeilen mit Werten in nachfolgenden Zeilen. In diesem Artikel wird eine alternative Methode für SQL Server 2008-Benutzer untersucht, die diese Funktionalität benötigen.
Abfragen der nächsten und vorherigen Zeilen
Das Ziel besteht darin, Zeilen dort zu isolieren, wo sich die aktuelle Zeile befindet StatusId ist 1 und die StatusId der nächsten Zeile ist 6, wobei beide Zeilen denselben Minutenzeitstempel haben. Da LEAD- und LAG-Funktionen nicht verfügbar sind, können wir einen Self-Join verwenden.
Self-Join-Ansatz
Die folgende Abfrage erstellt einen Join zwischen der Tabelle (siehe). als t) und eine „nächste Zeile“-Tabelle (als tnext bezeichnet). Zu den Bedingungen für die Verknüpfung gehören:
Abfrage für präzisen Minutenabgleich
Wenn ein präziser Minutenabgleich anstelle einer nur minutengenauen Nähe erforderlich ist, wird die Die Abfrage kann so geändert werden, dass sie die Bedingung datepart(minute, t.MinStartTime) = datepart(minute, tnext.MinStartTime).
Abfragebeispiel
Am Beispiel der bereitgestellten Tabelle sind hier die beiden Versionen der Abfrage:
Version 1 (Minutennähe):
select t.* from table t join table tnext on t.id = tnext.id - 1 and t.StatusId = 1 and tnext.StatusId = 6 and datediff(second, t.MinStartTime, tnext.MinStartTime) < 60;
Version 2 (präzise Minutenübereinstimmung):
select t.* from table t join table tnext on t.id = tnext.id - 1 and t.StatusId = 1 and tnext.StatusId = 6 and datediff(second, t.MinStartTime, tnext.MinStartTime) < 60 and datepart(minute, t.MinStartTime) = datepart(minute, tnext.MinStartTime);
Ausgabe
Die Ausgabe dieser Abfragen ruft die gewünschten Zeilen ab, die die angegebenen Kriterien erfüllen: Id 6, Dabei ist StatusId 1 und gefolgt von einer Id mit StatusId 6 zum gleichen Minutenzeitstempel (für Version 2).
Das obige ist der detaillierte Inhalt vonWie repliziert man LEAD- und LAG-Funktionalitäten in SQL Server 2008?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!