sql >> Databasteknik >  >> RDS >> Mysql

Hur hittar man luckor i sekventiell numrering i mysql?

Uppdatera

ConfexianMJS gav mycket bättre svar när det gäller prestanda.

Svaret (inte så snabbt som möjligt)

Här är versionen som fungerar på bord oavsett storlek (inte bara på 100 rader):

SELECT (t1.id + 1) as gap_starts_at, 
       (SELECT MIN(t3.id) -1 FROM arrc_vouchers t3 WHERE t3.id > t1.id) as gap_ends_at
FROM arrc_vouchers t1
WHERE NOT EXISTS (SELECT t2.id FROM arrc_vouchers t2 WHERE t2.id = t1.id + 1)
HAVING gap_ends_at IS NOT NULL
  • gap_starts_at - första id i aktuellt gap
  • gap_ends_at - sista id i aktuell lucka


  1. NLS_UPPER() Funktion i Oracle

  2. Datamigrering mellan olika DBMS

  3. Sammanfoga flera resultatrader i en kolumn till en, gruppera efter en annan kolumn

  4. Felaktigt strängvärde när du försöker infoga UTF-8 i MySQL via JDBC?