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

SQL - Find manglende int-værdier i for det meste ordnede sekventielle serier

Jeg har været der.

FOR ORACLE:

Jeg fandt dette ekstremt nyttigt forespørgsel på nettet for et stykke tid siden og noteret, men jeg kan ikke huske siden nu, du kan søge 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

Her er resultatet:

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

Hvis der var flere huller, f.eks. 2,6,7,9, ville det være:

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


  1. Hvornår eller hvorfor skal man bruge en SET DEFINE OFF i Oracle Database

  2. Et tabelnavn som en variabel

  3. Udtræk af det samlede antal sekunder fra en intervaldatatype

  4. [01000][unixODBC][Driver Manager]Kan ikke åbne lib '/usr/local/easysoft/oracle/InstantClient112/lib/libsqora.so':fil blev ikke fundet