Форум: "Базы";
Текущий архив: 2013.10.27;
Скачать: [xml.tar.bz2];
ВнизОптимизация SQL запроса Найти похожие ветки
← →
DelphiN! (2010-12-22 09:08) [0]Доброго времени суток!
Помогите оптимизировать следующий запрос
select
cast(time_ as date),
(select first 1 period_ from periodi where cast(time_ as date) = cast(MAIN.time_ as date)),
(select sum(summ_) from casebase where
(period_ = (select first 1 period_ from periodi where cast(time_ as date) = cast(MAIN.time_ as date))))"SUM"
from casebase MAIN
where
time_ > "01.12.2010" and time_ < "20.12.2010" and prim_ <> "Login activated" and prim_ <> "Login deactivated"
and prim_ <> "OUT" and prim_ <> "BONUS"
group by 1
order by 1
Можно ли из него сделать что-то наподобие
select
cast(time_ as date),
(select first 1 period_ from periodi where cast(time_ as date) = cast(MAIN.time_ as date)),
(select sum(summ_) from casebase where
(period_ = MAIN.2))"SUM"
from casebase MAIN
where
time_ > "01.12.2010" and time_ < "20.12.2010" and prim_ <> "Login activated" and prim_ <> "Login deactivated"
and prim_ <> "OUT" and prim_ <> "BONUS"
group by 1
order by 1
То есть не делать повторный под запрос а указать условие period_ = "тому что в столбце 2"
← →
Виталий Панасенко (2010-12-22 09:14) [1]execute block?
← →
DelphiN! (2010-12-22 09:18) [2]
> Виталий Панасенко (22.12.10 09:14) [1]
> execute block?
А можно пример?
← →
sniknik © (2010-12-22 09:46) [3]гораздо существеннее выигрыш будет если внутренние под запросы будут использовать индексы. для чего убрать вычисления для сравниваемого поля (ведь cast(time_ as date) это "обрезание" времени из дататайма, правильно понял? или там строка потому как дальше условие со строкой (это не авто преобразование?) тогда сменить тип поля)
← →
Виталий Панасенко (2010-12-22 10:55) [4]execute block - аналог ХП.. только без модификации метаданных БД(ничего создавать не нужно, как в случае с хранимой процедурой)
← →
evvcom © (2010-12-31 14:24) [5]Как все любят делать для вычисления поля дополнительный селект, возвращающий одно значение! Чем джойны не устраивают? Я не профи в птичке, но в оракле делаю примерно так:
select
cast(MAIN.time_ as date), -- не меняю, может и так
per.period_
-- прочие поля
from casebase MAIN
left join (
select distinct
period_,
cast(time_ as date) as time_
from periodi) per
on per.time_ = cast(MAIN.time_ as date)
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2013.10.27;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.002 c