sql >> Database >  >> RDS >> Oracle

hoe continu aantal keren voorkomen van een kolomwaarde in sql op te halen?

Allereerst hebben gegevens in SQL volgens de definitie geen volgorde tenzij de ORDER BY wordt gebruikt.
Zie:Wikipedia - Order By

U moet een extra kolom aan uw tabel toevoegen die de volgorde bepaalt en kan worden gebruikt in ORDER BY clausule, bijvoorbeeldRN kolom in het onderstaande voorbeeld:

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

Voor de bovenstaande gegevens kunt u Common Table Expression (recursieve query) gebruiken om het vereiste resultaat te krijgen, bijvoorbeeld de onderstaande query werkt op de Oracle-database:

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. Hoe gebruik ik een lijst als parameterbron voor SQL-query's met Vertx JDBC Client?

  2. PHP Meerdere invoer zoeken

  3. Gebruikers van MySQL-applicaties versus databasegebruikers

  4. Prestaties van tabelvariabelen in SQL Server