Ich habe eine Tabelle, die Nummern (Telefonnummern) und einen Code (kostenlos oder nicht verfügbar) enthält.Finden Sie fortlaufende freie Nummern in der Tabelle
Jetzt muss ich Reihe von 30 fortlaufenden Nummern finden, wie 079xxx100 - 079xxx130, und alle von ihnen, um freien Status zu haben.
Hier ist ein Beispiel, wie meine Tabelle wie folgt aussieht: in diesem Beispiel
CREATE TABLE numere
(
value int,
code varchar(10)
);
INSERT INTO numere (value,code)
Values
(123100, 'free'),
(123101, 'free'),
...
(123107, 'booked'),
(123108, 'free'),
(...
(123130, 'free'),
(123131, 'free'),
...
(123200, 'free'),
(123201, 'free'),
...
(123230, 'free'),
(123231, 'free'),
...
Ich brauche eine SQL-Abfrage, zu bekommen, den 123.200-123.230 Bereich (und alle nächsten verfügbaren Bereiche) me.
Nun fand ich ein Beispiel, mehr oder weniger tun, was ich brauche:
select value, code
from numere
where value >= (select a.value
from numere a
left join numere b on a.value < b.value
and b.value < a.value + 30
and b.code = 'free'
where a.code = 'free'
group by a.value
having count(b.value) + 1 = 30)
limit 30
aber dies ist nur die ersten 30 verfügbaren Zahlen zurückkehrt, und nicht in meinem Bereich (0-30). (Und dauert 13 Minuten auszuführen, hehe ..)
Wenn jemand eine Idee hat, lass es mich wissen (Ich bin mit SQL Server)
Danke, das funktioniert gut, mir 30 aufeinanderfolgende freie Nummern zu finden. Ich denke, von 00-30 Bereich nur finden, werde ich es manuell tun, weil ich nicht so viele Bereiche haben wird avialable :). Wenn jemand eine schnelle Möglichkeit hat, sie von 00 zu finden (ich würde wie eine Teilfunktion denken, die letzten Ziffern ausschneiden, dann prüfen, ob sie innerhalb des 0-30 Bereichs liegen. –
Den letzten Teil Ihres Kommentars nicht verstehen. Wie war die Leistung im Vergleich zu der Methode, die Sie ursprünglich verwendet? – UnhandledExcepSean
In Bezug auf Leistung, habe ich jetzt nur in einer Dummy-SQLite-Datenbank getestet, morgen werde ich mit Produktionsdatenbank überprüfen. Aber es sieht aus, dass die gleiche Leistung ist, mehr oder weniger mein Kommentar, dies ist ein echter Anwendungsfall, einige Unternehmen (mit 30 Mitarbeitern), wollen alle ihre Nummern haben, wie 079xxxx00-079xxxx30, (die letzten 2 Ziffern, von 0 bis 30) und ich muss aus der Datenbank auswählen wenn es freie Nummern gibt, innerhalb dieses Bereichs Anywhay, deine Antwort ist schon extremely usseful, wie es ist, danke –