sql >> Databasteknik >  >> RDS >> Oracle

SQL - Hitta saknade int-värden i mestadels ordnade sekventiella serier

Jag har varit där.

FOR ORACLE:

Jag fann det här extremt användbart fråga på nätet för ett tag sedan och noterade, men jag kommer inte ihåg sidan nu, du kan söka efter "GAP ANALYSIS" på Google.

SELECT   CASE
             WHEN ids + 1 = lead_no - 1 THEN TO_CHAR (ids +1)
          ELSE TO_CHAR (ids + 1) || '-' || TO_CHAR (lead_no - 1)
         END
             Missing_track_no
   FROM   (SELECT   ids,
                    LEAD (ids, 1, NULL)
                     OVER (ORDER BY ids ASC)
                        lead_no
             FROM   YOURTABLE
             )
   WHERE   lead_no != ids + 1

Här är resultatet:

MISSING _TRACK_NO
-----------------
       6

Om det fanns flera luckor, säg 2,6,7,9 så skulle det vara:

MISSING _TRACK_NO
-----------------
        2
       6-7
        9


  1. Vad heter rör?

  2. Hur man uppdaterar SQL Server-statistik för stora tabeller

  3. Kolla in de senaste nyheterna om Microsoft Access, inklusive Access 2022!

  4. ALTER TABLE i MySQL:Vän eller fiende?