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

  • Anthony Le

    Anthony Le

    10 EKİM 2006
  • HouseholdHacker

    HouseholdHac

    6 Kasım 2007
  • Liam Underwood

    Liam Underwo

    19 Mayıs 2009