Ich habe eine SQL-Abfrage, die eine Spalte wie folgt zurückgibt:
%Vor%Es wurde bereits auf eine bestimmte Weise geordnet, und ich möchte eine weitere Abfrage für diese Ergebnismenge durchführen, um die wiederholten Daten wie folgt zu identifizieren:
%Vor%Es ist wichtig, dass die zweite Gruppe von 1200 als von der ersten getrennt identifiziert wird. Jede Variation von OVER / PARTITION scheint beide Gruppen zusammenfassen zu wollen. Gibt es eine Möglichkeit, die Partition nur auf diese wiederholten Gruppen zu beschränken?
Bearbeiten: Dies ist für Microsoft SQL Server 2012
Nicht sicher, dass dies die schnellsten Ergebnisse sein werden ...
%Vor%Angenommen, die Tabelle "num" hat eine Spalte "num", die Ihre Daten enthält, in der Reihenfolge - natürlich könnte num in eine Ansicht oder ein "mit" für Ihre ursprüngliche Abfrage gemacht werden.
Bitte beachten Sie die folgenden sqlfiddle
Sie können es tun, ohne Cursor zu verwenden, aber es sieht nicht gut aus (zumindest was ich herausgefunden habe). Also 1) Ich nehme an, Sie haben PK-Spalte, die Ihre Hauptwerte bestellt. Dann 2) Ich nehme an, Sie haben eine ID-Spalte, die Sie festlegen möchten.
%Vor%SQL Geige hier: Ссылка
%Vor%SQL 2012 +
Die folgende Lösung benötigt eine Spalte ( ID
in diesem Beispiel; sie kann aber auch ein Datum / Uhrzeit einfügen / erstellen), um die INSERT
Reihenfolge der foo
Werte zu speichern: Außerdem werden zwei Funktionen verwendet, die mit beginnen SQL Server 2012: LAG (um den vorherigen Wert zu erhalten) und SUM OVER ORDER BY (um laufende Summen zu berechnen):
Ausgabe:
%Vor%Tags und Links sql sql-server-2012