sql >> Database teknologi >  >> RDS >> Oracle

hvordan man henter kontinuerlig forekomst optælling af en kolonneværdi i sql?

Først og fremmest har data i SQL per definition ingen rækkefølge, medmindre ORDER BY bruges.
Se:Wikipedia - Bestil efter

Du skal angive en ekstra kolonne til din tabel, der bestemmer rækkefølgen og kan bruges i ORDER BY klausul, for eksempel RN kolonne i nedenstående eksempel:

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

For ovenstående data kan du bruge Common Table Expression (rekursiv forespørgsel) for at få det ønskede resultat, for eksempel virker nedenstående forespørgsel på Oracle-databasen:

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
 



  1. Ruby:Sådan udskiftes parametre dynamisk i native PG gem

  2. Kunne ikke oprette forbindelse til MySQL gennem EF6 i Visual Studio 2013

  3. PHP eval() kode i mellem <?php ?> fra databasen

  4. iOS - Best Practices for Core Data and Server Database Synchronization