![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Оптимизация SQL запроса [FB 2.1]
DelphiN! © (2010-12-22 09:08:00)Доброго времени суток!
Помогите оптимизировать следующий запрос
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"
evvcom (2010-12-31 14:24:00) [1]Как все любят делать для вычисления поля дополнительный селект, возвращающий одно значение! Чем джойны не устраивают? Я не профи в птичке, но в оракле делаю примерно так:
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)
Виталий Панасенко (2010-12-22 10:55:00) [2]execute block - аналог ХП.. только без модификации метаданных БД(ничего создавать не нужно, как в случае с хранимой процедурой)
sniknik (2010-12-22 09:46:00) [3]гораздо существеннее выигрыш будет если внутренние под запросы будут использовать индексы. для чего убрать вычисления для сравниваемого поля (ведь cast(time_ as date) это "обрезание" времени из дататайма, правильно понял? или там строка потому как дальше условие со строкой (это не авто преобразование?) тогда сменить тип поля)
DelphiN! (2010-12-22 09:18:00) [4]
> Виталий Панасенко (22.12.10 09:14) [1]
> execute block?
А можно пример?
Виталий Панасенко (2010-12-22 09:14:00) [5]execute block?