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

Oracle partitioneret sekvens

Er det faktiske krav, at den sekundære sekvens skal være mellemrumsfri? Hvis ja, har du et kæmpe problem med serialisering/skalerbarhed.

Hvis du har brug for at præsentere en hulfri sekvens til konsum, kan du bruge en faktisk sekvens (eller et tidsstempel, for den sags skyld), som Nick Pierpont foreslår og bevare skalerbarheden, du kan bruge analytiske funktioner.

Datasæt (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;

Resultat:

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. SQL Server, konvertere en navngiven instans til standardinstans?

  2. Er der nogen måde at udføre en forespørgsel inde i strengværdien (som eval) i PostgreSQL?

  3. Sådan begrænser du resultater i T-SQL

  4. Oracle-lagret procedure med parametre for IN-klausul