Ich habe ein Problem mit der Gruppierung meiner Datenmenge in MS SQL Server.
Mein Tisch sieht wie
aus %Vor%Jetzt möchte ich die Zeilen gruppieren, in denen die SalesDate-Differenz für die nächste Zeile maximal 5 Minuten beträgt. Diese Reihe 1 & amp; 2, 3 & amp; 4 und 5 & amp; 6 sind jeweils eine Gruppe.
Mein Ansatz war es, die Minuten mit der Funktion DATEPART () zu erhalten und das Ergebnis durch 5 zu teilen:
%Vor%Für Zeile 1 und 2 wäre das Ergebnis 3 und die Gruppierung würde hier perfekt funktionieren. Aber für die anderen Zeilen, in denen sich die Stunde oder sogar der Tagesabschnitt von SalesDate ändert, kann das Ergebnis nicht zum Gruppieren verwendet werden.
Also hier bin ich festgefahren. Ich würde es sehr schätzen, wenn mir jemand in die richtige Richtung zeigen könnte.
Sie möchten benachbarte Transaktionen basierend auf dem Zeitverhalten zwischen ihnen gruppieren. Die Idee ist, eine Art Gruppierungskennung zuzuweisen und diese dann zur Aggregation zu verwenden.
Hier ist ein Ansatz:
lag()
und Datumsarithmetik. Die Abfrage sieht so aus:
%Vor%BEARBEITEN
Danke an @JoeFarrell für den Hinweis, dass ich die falsche Frage beantwortet habe. Das OP sucht nach dynamischen Zeitunterschieden zwischen Zeilen, aber dieser Ansatz erstellt feste Grenzen.
Ursprüngliche Antwort
Sie könnten eine Zeittabelle erstellen. Dies ist eine Tabelle, die einen Datensatz für jede Sekunde des Tages enthält. Ihre Tabelle würde eine zweite Spalte haben, mit der Sie Gruppenbits ausführen können.
%Vor%Der Ansatz funktioniert am besten, wenn:
Nach dem Auffüllen können Sie sich einfach der Tabelle anschließen und das gewünschte Ergebnis ausgeben.
%Vor%Tags und Links sql sql-server sql-server-2014