Ich habe eine recht große Anzahl von Telefonnummern (ca. 2 Millionen) in einer Datenbanktabelle. Diese Zahlen wurden in Blöcken eingefügt, so dass es viele kontinuierliche Zahlenbereiche gibt, alles von 10 bis 10 000 in einem Bereich. Einige dieser Nummern werden verwendet und sind daher als nicht verfügbar gekennzeichnet, der Rest ist verfügbar. Bei einer bestimmten Nummer brauche ich einen Weg, um kontinuierliche Zahlenbereiche zu finden, sowohl oberhalb als auch unterhalb dieser Zahl. Der Bereich sollte fortgesetzt werden, bis er eine nicht verfügbare Nummer findet oder die Grenze von zwei Bereichen erreicht.Suchen von kontinuierlichen Bereichen in einer Reihe von Zahlen
Zum Beispiel angesichts der folgenden Satz:
1000
1001
1002
1010
1011
1012
1013
1020
1021
1022
der Suche 1012 als Parameter sollte 1010 zurückgeben, 1011, 1012, 1013.
Was zur Ausbildung einer Abfrage, um eine gute Möglichkeit ist, Finde diese Bereiche? Wir verwenden NHibernate auf dem SQL-Server, eine Lösung, die beide verwendet, ist in Ordnung.
Dachte irgendwo in diese Richtung, aber sah es nicht +1 – Unreason
Das ist schlau, aber beantwortet nicht vollständig die Frage. Wenn eine der Zeilen entfernt wird, werden die IDs nicht neu berechnet, sodass Sie für alle Werte eine nicht kontinuierliche Menge mit demselben Unterschied haben. Ich kann möglicherweise eine generierte Zeilennummer als Teil einer Abfrage verwenden, um die Dinge zu beschleunigen. –
Ja, Sie könnten die Funktion ROW_NUMBER() über die Spalte ID verwenden, um eine fortlaufende Sequenz für die Diff-Berechnung zu generieren. http://msdn.microsoft.com/en-us/library/ms186734.aspx –