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

  • Bryan Adams

    Bryan Adams

    30 Mart 2006
  • Matthew Pearce

    Matthew Pear

    9 AĞUSTOS 2009
  • PCDIY

    PCDIY

    16 AĞUSTOS 2013