Oracle
 sql >> база данни >  >> RDS >> Oracle

как да извлека непрекъснат брой на срещания на стойност на колона в sql?

Първо, в SQL по дефиниция данните нямат никакъв ред, освен ако ORDER BY се използва.
Вижте:Wikipedia - Подреждане по

Трябва да предоставите допълнителна колона към вашата таблица, която определя реда и може да се използва в ORDER BY клауза, напримерRN колона в примера по-долу:

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

За горните данни можете да използвате Common Table Expression (рекурсивна заявка), за да получите необходимия резултат, например заявката по-долу работи в база данни на Oracle:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да получите коментари за таблица чрез SQL в Oracle?

  2. Динамично завъртане на таблица Oracle

  3. Импортиране на дъмп с параметър SQLFILE, който не връща данните в таблицата

  4. Следваща нула

  5. Oracle:Как да конвертирам шестнадесетичен в десетичен в Oracle SQL?