Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.01 c
14-35066
MorisTheCat
2003-05-27 22:21
2003.06.12
Поразачетов и сессий!


1-34866
Chery
2003-05-31 13:26
2003.06.12
Как из переменной типа Double извлечь целую часть


1-34916
Duby
2003-06-01 22:26
2003.06.12
Наложение компонентов


3-34674
Belkova
2003-05-21 14:38
2003.06.12
UDF


1-34911
romeomd
2003-06-01 21:22
2003.06.12
Работа с иконками




   Наверх