1

オラクルのテーブル列で欠落している数字を見つける必要があります。欠落している数字は 100 で取得する必要があります。つまり、少なくとも 2000 から 2099 の間に 1 つの数字が見つかった場合、2000 から 2099 までのすべての欠落している数字を返す必要があるということです。の上。

ここに私が必要なものを明確にする例があります:

create table test1 ( a number(9,0));

insert into test1 values (2001);
insert into test1 values (2002);
insert into test1 values (2004);
insert into test1 values (2105);
insert into test1 values (3006);
insert into test1 values (9410);
commit;

結果は 2000,2003,2005 から 2099,2100 から 2104,2106 から 2199,3000 から 3005,3007 から 3099,9400 から 9409,9411 から 9499 でなければなりません。

私はこのクエリから始めましたが、明らかに必要なものを返していません:

SELECT Level+(2000-1) FROM dual  CONNECT BY LEVEL  <= 9999 
MINUS SELECT a FROM test1;
4

3 に答える 3

0

範囲に固定の上限と下限を定義すると仮定すると、次のNOT EXISTSようなものを使用して現在のクエリの結果を除外するだけで済みます

SQL> exec :min_val:=2000
SQL> exec :min_val:=2499
SQL> SELECT *
       FROM
       (
        SELECT level + :min_val - 1 AS nr
          FROM dual        
       CONNECT BY level <= :max_val - :min_val + 1
       )
      WHERE NOT EXISTS ( SELECT * FROM test1 WHERE a = nr ) 
      ORDER BY nr;
      /

Demo

于 2020-11-06T11:30:30.847 に答える