Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Wie rufe ich die Anzahl der kontinuierlichen Vorkommen eines Spaltenwerts in SQL ab?

Zunächst einmal haben die Daten in SQL per Definition keine Reihenfolge außer dem ORDER BY verwendet wird.
Siehe:Wikipedia - Bestellen nach

Sie müssen Ihrer Tabelle eine zusätzliche Spalte hinzufügen, die die Reihenfolge bestimmt und in ORDER BY verwendet werden kann -Klausel, zum BeispielRN Spalte im folgenden Beispiel:

        RN CS_ID     
---------- ----------
         1 a         
         2 b         
         3 a         
         4 a         
         5 a         
         6 b         
         7 b         
         8 b         
         9 b   

Für die obigen Daten können Sie Common Table Expression (rekursive Abfrage) verwenden, um das erforderliche Ergebnis zu erhalten, zum Beispiel funktioniert die folgende Abfrage auf einer Oracle-Datenbank:

WITH my_query( RN, cs_id , cont ) AS (

    SELECT t.rn, t.cs_id, 1
        FROM My_table t
        WHERE rn = 1
    UNION ALL
    SELECT t.rn, t.cs_id,
         case when t.cs_id = m.cs_id
              then m.cont + 1
              else 1
         end
        FROM My_table t
        JOIN my_query m
        ON t.rn = m.rn + 1
)
select * from my_query
order by rn;

        RN CS_ID            CONT
---------- ---------- ----------
         1 a                   1
         2 b                   1
         3 a                   1
         4 a                   2
         5 a                   3
         6 b                   1
         7 b                   2
         8 b                   3
         9 b                   4