+---+------------+
| V | output |
+---+------------+
| y | 1 |
| y | 2 |
| y | 3 |
| N | 0 |
| y | 1 |
| y | 2 |
| N | 0 |
| N | 1 |
+---+------------+
Antwort
Ihre Beispielausgabe ist etwas wie ein wenig komplex,
ich ein SQL recursive query für die Lösung des Problems Natürlich, verwenden Ich gehe davon aus, dass die ID-Säule von 1 beginnt und geht kontinuierlich ohne Spalt . In einem komplexeren Fall der row_number() Funktion sollte neben id-Feld hinzugefügt werden und kommen sollten, ist
Ich hoffe, es hilft,
--create table bool(id int identity(1,1), bool char(1))
--insert into bool values ('Y'),('N'),('Y'),('Y'),('Y'),('N'),('Y'),('N'),('N'),('Y'),('Y'),('Y'),('Y'),('Y'),('N'),('Y'),('Y')
;with cte as (
select id, bool curr, bool pre, 1 output from bool where id = 1
union all
select
bool.id, bool.bool curr, cte.curr,
case when bool.bool = cte.curr then cte.output + 1 else case when bool.bool = 'Y' then 1 else 0 end end
from cte
inner join bool on bool.id = cte.id + 1
)
select * from cte
Output-Setup auf rownumbers wie folgt
Lassen Sie mich annehmen, dass Sie eine Spalte haben (sagen wir id
), die die Bestellinformationen enthält. Dann möchten Sie Gruppen von "Y" s und "N" s identifizieren, die zusammen erscheinen und sie dann aufzählen.
Sie können dies einen Unterschied von Zeilennummern Trick:
select t.v,
row_number() over (partition by v, seqnum_id - seqnum_vid order by id) as output
from (select t.*,
row_number() over (order by id) as seqnum_id,
row_number() over (partition v by order by id) as seqnum_vid
from t
) t;
erklären, wie das funktioniert in der Regel heikel ist. Ich empfehle, dass Sie die Unterabfrage ausführen, um zu sehen, wie die Sequenznummern aussehen und warum die Differenz für die Gruppen, die Sie identifizieren möchten, konstant ist.
- 1. Orient-db-Sequenz erzeugen
- 2. Sequenz mit Rekursion erzeugen
- 3. Erzeugen "eigenen" Fibonacci Sequenz
- 4. erzeugen eine Integer-Sequenz in MySQL
- 5. Matlab: gegeben eine Präfix-String, wie eine Sequenz zu erzeugen
- 6. So teilen Sie eine Sequenz in Scala
- 7. Wie kann ich eine Sequenz von Zahlen in Elixir erzeugen?
- 8. So erzeugen Sie manuell Zufallszahlen
- 9. Pandas: aggregieren eine Spalte einer nicht-duplizierte Sequenz zu erzeugen
- 10. Erzeugen einer Sequenz basierend auf einem Feld
- 11. Generieren eine Sequenz wie 112123123412345
- 12. So senden Sie eine Daten von der Anzeigetafel zu Sequenz
- 13. Jquery Range Slider So erstellen Sie eine eigene Sequenz
- 14. So erweitern Sie eine Sequenz (var-args) in verschiedene Elemente
- 15. So erstellen Sie eine Lazy-Sequenz von Zufallszahlen in Clojure
- 16. So kompilieren Sie eine Sequenz von Ergebnissen mit ask pattern
- 17. So drucken Sie vordefinierte Sequenz in Python
- 18. Scalacheck: Erzeugen Sie eine nicht leere Zeichenfolge
- 19. MYSQL - Erzeugen von Teilmenge Sequenz in einer Tabelle
- 20. Ruhe zwei unterschiedliche Sequenz Ids für PostgreSQL Erzeugen Insert
- 21. Löschen Sie eine Sequenz in Nim
- 22. Wie erstelle ich eine falsche "Loading ..." Sequenz?
- 23. Ändern ovale füllen Sie eine Sequenz
- 24. Programmgesteuert erzeugen Sie eine C Win32 DLL
- 25. Scala Sequenz zu einer Sequenz von Sequenz
- 26. Wie Alias eine Sequenz von Aufgaben?
- 27. So drucken Sie die folgende Sequenz, während diese Bedingungen erfüllt
- 28. Generieren Sie eine Sequenz von Zeit mit R und lubridate
- 29. So erzeugen Sie konsistente GUID mit Wix-Erntemethode
- 30. Bereich v3 eine Sequenz
Sie können nicht. SQL-Tabellen repräsentieren * ungeordnete * Mengen. Sie benötigen also eine Spalte, die die Reihenfolge angibt, um das gewünschte Ergebnis zu erhalten. –