Ich habe Daten, wo ich versuche, Muster zu identifizieren. Die Daten in jeder Tabelle sind jedoch nicht vollständig (es fehlen Zeilen). Ich möchte die Tabelle in Stücke von vollständigen Daten trennen und dann die Muster von jedem identifizieren. Ich habe eine Spalte, in der ich identifizieren kann, ob die Daten vollständig sind oder nicht sequence
genannt werden.SQL Split Daten durch kontinuierliche zunehmende Sequenz und dann Teilmenge jeweils durch ein Muster
Die Daten werden wie folgt aussehen:
Sequence Position
1 open
2 closed
3 open
4 open
5 closed
8 closed
9 open
11 open
13 closed
14 open
15 open
18 closed
19 open
20 closed
Zuerst habe ich die Daten in komplette Abschnitte aufteilen möchte:
Sequence Position
1 open
2 closed
3 open
4 open
5 closed
---------------------------
8 closed
9 open
---------------------------
11 open
---------------------------
13 closed
14 open
15 open
---------------------------
18 closed
19 open
20 closed
Dann würde ich das Muster so zu identifizieren, wie closed open, ..., open, closed
, dass wir gehen von geschlossen zu offen für n Zeilen (wobei n mindestens 1 ist) und dann zurück zu geschlossen
Aus den Beispieldaten würde dies lauten:
Sequence Position
2 closed
3 open
4 open
5 closed
---------------------------
18 closed
19 open
20 closed
Dies lässt meine Final Table, wo ich die Analyse durchführen kann, da ich weiß, dass es keine gebrochenen Sequenzen gibt. Ich habe auch eine andere Spalte, in der position
binär ist, wenn das einfacher ist, mit zu arbeiten.
Die Tabellen sind groß, obwohl ich denke, dass ich Schleifen schreiben kann, um mein Ergebnis herauszufinden, glaube ich nicht, dass diese Methode effizient genug wäre. Alternativ würde ich die ganze Tabelle in R
ziehen, dann die Ergebnistabelle finden, aber dies erfordert alles in R
zieht zuerst so frage ich mich, ob dies in SQL
EDIT machbar ist: Verschiedene Beispieldaten, die mehr Vertreter sind:
Sequence Position
1 open
2 closed
3 open
4 open
5 closed
8 closed
9 open
11 open
13 closed
14 open
15 open
18 closed
19 open
20 closed
21 closed
22 closed
23 closed
24 open
25 open
26 closed
27 open
Hinweis sollte die gleichen Ergebnisse haben aber auch mit
23 closed
24 open
25 open
26 closed
21
, 22
und 27
sind nicht, wie sie die closed
passen nicht, open
..., open
, closed
Muster
aber wenn wir 28 closed
hätten wir 27
und 28
wollen, da es keine Zeitlücke und das Muster passen würde. Wenn statt 28
es 29 closed
wäre, würden wir 27
oder 29
nicht wollen (weil, obwohl das Muster richtig ist, die Folge bricht).
Um etwas Kontext hinzuzufügen, denken Sie an eine Maschine, die von Stop, zu Laufen, zu Stoppen geht. Wir nehmen die Daten auf, haben aber Lücken in der Aufzeichnung, die hier durch das Aufbrechen der Sequenzen repräsentiert sind. Sowie fehlende Daten in der Mitte des Stop-Running-Stop-Zyklus; Die Daten werden manchmal auch aufgenommen, wenn das Gerät bereits läuft oder die Aufzeichnung stoppt, bevor das Gerät stoppt. Ich möchte diese Daten nicht, da es sich nicht um einen vollständigen Zyklus von Stop, Running und Stop handelt. Ich möchte nur diese vollständigen Zyklen, und wo die Sequenz kontinuierlich war. Dies bedeutet, dass ich meinen ursprünglichen Datensatz in einen mit nur vollständigen Zyklen nacheinander umwandeln kann.
Ich würde vorschlagen, dass Sie eine SQL Fiddle oder Rextester einrichten. –
was willst du eigentlich Spilled bedeutet? Tabellen dafür spinnen? –
Nein, nur ein 'select', das die Daten filtert. – Olivia