Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.06.12;
Скачать: CL | DM;

Вниз

Подскажите как оптимизировать запрос...   Найти похожие ветки 

 
diokant   (2003-05-26 10:52) [0]

есть 2 табл
1-tmp02
cod_uu-код , date_s-дата начала интересуемого периода, date_f-дата конца интересуемого периода

2-tmp04
cod_uu-код , datevatt1-дата начала периода, datevatt2-дата конца периода, c.znth-значение за период

нужно получить сумму за интересуемые периоды

Так работает:

select a.*,
(select sum(c.znth) from tmp04 c
where ( (a.date_s<=c.datevatt1) and (a.date_F>=c.datevatt2)
and (a.cod_uu=c.cod_uu)))
as dataItog from tmp02 a

Но меня не устраивает скорость...
Подскажите, что можно сделать?


 
stone ©   (2003-05-26 11:02) [1]

select a.*, sum(c.znth) as dataItog from tmp02 a inner join tmp04 c on a.cod_uu=c.cod_uu where a.date_s <= c.datevatt1 and a.date_F >= c.datevatt2


 
diokant   (2003-05-26 11:17) [2]

<select a.*, sum(c.znth) as dataItog from tmp02 a inner join tmp04 c on a.cod_uu=c.cod_uu where a.date_s <= c.datevatt1 and a.date_F >= c.datevatt2>

так не работает...

Server: Msg 8118, Level 16, State 1, Procedure Calc_interval_mosh_UU_0101, Line 177
Column "a.cod_uu" is invalid in the select list because it is not contained in an aggregate function and there is no GROUP BY clause.
Server: Msg 8118, Level 16, State 1, Procedure Calc_interval_mosh_UU_0101, Line 177
Column "a.date_s" is invalid in the select list because it is not contained in an aggregate function and there is no GROUP BY clause.
Server: Msg 8118, Level 16, State 1, Procedure Calc_interval_mosh_UU_0101, Line 177
Column "a.date_f" is invalid in the select list because it is not contained in an aggregate function and there is no GROUP BY clause.


 
Johnmen ©   (2003-05-26 11:20) [3]

Неясно предназначение первой таблицы в рамках контекста вопроса...


 
diokant   (2003-05-26 11:30) [4]

первая таблица временая - в ней строки соответствуют периодам, за которые необходимо получить значения.

2-я содержит значения, но интервалы меньше или равны интересуемым.
(т.е. в первой интересуемые к примеру за сутки, а во второй интервалы по пол часа, и все соответственно для своих cod_uu)


 
stone ©   (2003-05-26 11:37) [5]


> and there is no GROUP BY clause.


Потому что в конце нужно еще добавить GROUP BY


 
diokant   (2003-05-26 14:38) [6]

Да так где-то в 4 раза быстрее...

select a.*,
sum(c.znth) as dataItog
from tmp02 a left join tmp04 c on a.cod_uu=c.cod_uu
where a.date_s <= c.datevatt1 and a.date_F >= c.datevatt2 group by a.cod_uu, plus_minus, date_s, date_f, ninterval

Спасибо...



Страницы: 1 вся ветка

Текущий архив: 2003.06.12;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.014 c
3-34735
softmaster
2003-05-23 12:09
2003.06.12
POST and IBX


4-35104
Вадим
2003-04-13 13:51
2003.06.12
плавная прокрутка в TRichEdit


1-34843
V-A-V
2003-05-30 13:12
2003.06.12
Splitter


14-35062
Soft
2003-05-27 13:28
2003.06.12
Проект OCR под Linux


4-35123
Некий_программёр
2003-04-15 11:42
2003.06.12
FileMapping