Добро пожаловать, Гость
Логин: Пароль: Запомнить меня
SQL, PL/SQL, T-SQL: запросы, DML DDL операторы, пакеты, процедуры, функции, триггеры и последовательности.
  • Страница:
  • 1
  • 2
  • 3
  • 4

ТЕМА:

Re: Подскажите как правильно написать SQL запрос в Oracle 12 года 8 мес. назад #2841

Я ориентировался на твое первое письмо. Прогнал все insert-ы которые в нем перечислены и запрос вернул то, что ты и просил

Запрос должен выбрать только одну строку удовлетворяющую такому условию (например) COL1 < 3, для самого большого COL1 < 3 нужно найти самое большое COL2 < 5, для самых больших COL1 < 3 и COL2 < 5 нужно найти COL3 < 2 тоже самое большое. Т.е. при таких условиях запрос должен вернуть строку

>COL1 COL2 COL3
>




>2 2 1

Если что не так, то дай другой скрипт для теста

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: Подскажите как правильно написать SQL запрос в Oracle 12 года 8 мес. назад #2842

  • Rita
  • Rita аватар Автор темы
  • Не в сети
  • Новый участник
  • Новый участник
  • Спасибо получено: 0
drop table test;
create table test (col1 number(3), col2 number(3), col3 number(3));

insert into test values (1,1,1);
insert into test values (2,2,2);
insert into test values (5,5,5);

запрос с условиями из первого поста должен вернуть
2 2 2

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: Подскажите как правильно написать SQL запрос в Oracle 12 года 8 мес. назад #2843

Ну как же все таки насчет того что нужно найти COL3 < 2 тоже самое большое.
или col3<=2 тоже устроит ?

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: Подскажите как правильно написать SQL запрос в Oracle 12 года 8 мес. назад #2844

Это противоречивое условие. В любом случае нельзя выбрать строку 2 2 2, если жёстко стоит условие COL3 < 2.
Я понимаю, что тебе хочется получить именно эту строку интуитивно, но в данном случае твоя интуиция не соответствует критерию COL3<2.

1) COL1 < 3, получаем
1 1 1
2 2 2 - самое большлое COL1
2) На входе второго условия имеем только одну строку
2 2 2
COL2<5
2 2 2
3) COL3< 2
Всё, ничего не осталось.

Поэтому вопрос: с какой стати должна остаться строка 2 2 2?

Потомучто тебе так хочется?

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: Подскажите как правильно написать SQL запрос в Oracle 12 года 8 мес. назад #2845

  • Rita
  • Rita аватар Автор темы
  • Не в сети
  • Новый участник
  • Новый участник
  • Спасибо получено: 0
Да нет col3<=2 не устроит...
фишка в том, что "главным" условием должно быть условие по первому столбцу, следующее за ним по "главности" условие по втрому и т.д.
т.е. если в таблице есть col1<3 и наибольшее из них col1=2 то все остальные условия должны проверяться только для col1=2 и если они не выполняются, то должна вернуться строка, которая удовлетворяет только превому условию.
Вооот...

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: Подскажите как правильно написать SQL запрос в Oracle 12 года 8 мес. назад #2846

select /*+ PUSH_SUB(v)*/
col1,col2,col3 , co from
(
select max(col1) col1 ,max(col2) col2,max(col3) col3 ,GROUPING(col1) AS Co
from test t
where col1 < 3
and ( col1 < 3 or col3 < 2 )
and ( col1 < 3 or col2 < 5 )
group BY ROLLUP (col1,col3)) v
where co = 1

Result:
COL1 COL2 COL3 CO
2 2 2 1

Column col1 ( recommended ) indexed.


Runtime::~ 0.12 sec on (1.000.000.000 rows on F15)

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

  • Страница:
  • 1
  • 2
  • 3
  • 4
Время создания страницы: 0.398 секунд