SORU
2 Aralık 2010, PERŞEMBE


Nasıl mysql sıralı numaralandırma boşlukları bulmak için?

Başka bir sistemden ithal edilen bir tablo ile bir veritabanı var. Otomatik artan bir sütun var, ve yinelenen değerler yoktur, ama değerleri eksik. Örneğin, bu çalışan sorgu:

select count(id) from arrc_vouchers where id between 1 and 100

dönüş ama 100, 87 yerine döner. Eksik sayılar dönecektir çalıştırabilirsiniz herhangi bir sorgu var mı? Örneğin, Kayıt numarası 1-70 için var olabilir ve 83-100, ama 71-82 kimliği ile kayıt yok. 71, 72, 73, vb dönmek istiyorum.

Bu mümkün mü?

CEVAP
19 Mayıs 2011, PERŞEMBE


İşte her boyutta tablo üzerinde çalışan sürümü (sadece 100 satır):

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 - cari açığın ilk kimliği
  • gap_ends_at - cari açığın son numarası

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • pilslajt

    pilslajt

    20 HAZİRAN 2008
  • RealPapaPit

    RealPapaPit

    16 Mart 2009
  • Tire Rack

    Tire Rack

    31 Mayıs 2007