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

Разделената последователност на Oracle

Действителното изискване вторичната последователност да е без празнини? Ако е така, имате огромен проблем с сериализацията/мащабируемостта.

Ако трябва да представите последователност без пропуски за консумация от човека, можете да използвате действителна последователност (или времева марка, в този смисъл), както предлага Ник Пиърпонт, и да запазите мащабируемостта, можете да използвате аналитични функции.

Набор от данни (t1):

 ID_PERSON SEQUENCE_ID
---------- -----------
         1           1
         2           2
         3           3
         1           4
         1           5
         1           6
         2           7
         3           8
         1           9

SQL:

select * 
  from 
  (select id_person, 
          sequence_id as orig_sequence_id,         
          rank () 
            over (partition by id_person 
                  order by sequence_id) 
            as new_sequence_id
     from t1
  )
 order by id_person, new_sequence_id;

Резултат:

ID_PERSON  ORIG_SEQUENCE_ID NEW_SEQUENCE_ID
---------- ---------------- ---------------
         1                1               1
         1                4               2
         1                5               3
         1                6               4
         1                9               5
         2                2               1
         2                7               2
         3                3               1
         3                8               2


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да върнете списък с поддържани територии в Oracle

  2. Бавна миграция към облак

  3. Как да попълните набора от данни с C# от базата данни на Oracle

  4. как да предоставим привилегия на потребител за конкретна схема?

  5. Oracle изберете за поведение на актуализиране