数字(電話番号)とコード(空きありません)を含むテーブルがあります。テーブルで連続した空き番号を見つけよう
ここでは、079xxx100 - 079xxx130のような30個の連続した数字のシリーズを見つけて、それらのすべてがフリーステータスになるようにする必要があります。私は、この例では123200から123230の範囲(およびすべての次の使用可能な範囲を)私を取得するには、SQLクエリを必要とする
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'),
...
:ここ
は次のように私のテーブルがどのように見えるかの例です。
は今、私は私が必要なもの、多かれ少なかれやって、例を見つけました:
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
が、これは私の範囲(0-30)内のみ最初の30の可能な番号を返す、とされていません。誰もがアイデアを持っている場合
(と..笑、実行するために13分かかります)、(私はSQL Serverを使用しています)
感謝を持っているすべての数字である必要があり、これは私の30個の連続した空き番号を見つけ、正常に動作します。 00-30の範囲からしか見つけることはできませんので、私は手作業で行います。 誰かが00からそれらを見つける簡単な方法を持っていれば(最後の数字を切り捨てて、それらが0-30の範囲内にあるかどうかをチェックする、substr関数のように思えるでしょう) –
あなたのコメントの後半部分を理解していません。どのようにパフォーマンスが元々使っていた方法と比較したのですか? – UnhandledExcepSean
性能に関して、私はダミーのsqliteデータベースでしかテストしていません。明日は本番データベースで確認しますが、それは多かれ少なかれ同じ性能です。私のコメント、これは実際の使用事例で、一部の企業(30人の雇用者を持つ)は079xxxx00-079xxxx30のような数字をすべて持ちたいと思っています(最後の2桁、0から30まで)、データベースから選択する必要があります、無料の番号がある場合は、この範囲内 anywhay、あなたの答えはそれがそうであるように、すでに極端にusmefulです。ありがとう –