Выберите номера, не представленные в серии нескольких номеров в Oracle - PullRequest
0 голосов
/ 15 июля 2011

В Oracle 10g, как выбрать значения, которые не подходят для нескольких диапазонов. Например:

С учетом чисел:

5, 10, 20, 26, 40, 50, 55, 60, 100, 200, 203, 211, 230

И диапазоны:

10 - 25

50 - 55

200 - 210

Следующие цифры не вписываются в диапазоны:

5 26 40 60 100 211 230

Данные испытаний:

CREATE TABLE myseries (start_sequence NUMBER(6), end_sequence NUMBER(6));

CREATE TABLE myvalues (sequence_number NUMBER(6));

INSERT INTO myseries VALUES(10,25);

INSERT INTO myseries VALUES(50,55);

INSERT INTO myseries VALUES(200,210);

-- Insert test data
INSERT INTO myvalues VALUES(5);
INSERT INTO myvalues VALUES(10);
INSERT INTO myvalues VALUES(20);
INSERT INTO myvalues VALUES(26);
INSERT INTO myvalues VALUES(40);
INSERT INTO myvalues VALUES(50);
INSERT INTO myvalues VALUES(55);
INSERT INTO myvalues VALUES(60);
INSERT INTO myvalues VALUES(100);
INSERT INTO myvalues VALUES(200);
INSERT INTO myvalues VALUES(203);
INSERT INTO myvalues VALUES(211);
INSERT INTO myvalues VALUES(230);

select sequence_number from myvalues
where sequence_number not in (??)

1 Ответ

5 голосов
/ 15 июля 2011
select sequence_number from myvalues m
where not exists
 ( select 1 from myseries s where m.sequence_number between s.start_sequence
   and s.end_sequence )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...